问下为啥 windows系统老是出这个问题?

情况是这样的,我有个客户给我一台 windows10电脑作为服务器,
然后我安装了laravel,然后里面有定时任务,会一直不停地去请求一个设备的数据,然后将数据保存到本地,和上传到云上,现在情况是不知道为啥,这个网站只要运行个几天之后,就报这个错误

[2023-12-08 05:55:47] production.ERROR: SQLSTATE[HY000] [2002] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

或者这个报错

[2023-12-08 05:56:47] production.ERROR: SQLSTATE[HY000] [2002] 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。

然后我重启下电脑又正常,现在搞得我很头疼,数据也老是丢失了,问下windows下如何能设置连接数,或者如何能自动清理下连接数,和系统缓存?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

我把你的问题复制到 chatgpt
在 Windows 系统下,有一些方法可以尝试解决连接数和系统缓存的问题:

  1. 调整 MySQL 配置:
    在 MySQL 配置文件(一般是 my.ini 或 my.cnf)中,你可以尝试调整以下参数:
max_connections = 100   # 设置最大连接数

请根据你的实际需求调整这些值。调整完成后,重启 MySQL 服务。

  1. 关闭不必要的连接:
    确保你的 Laravel 项目中,对数据库的连接使用是必要的,避免产生不必要的持久连接。在 Laravel 中,你可以在数据库配置文件(config/database.php)中关闭持久连接:
    'mysql' => [
     'driver' => 'mysql',
     'host' => env('DB_HOST', '127.0.0.1'),
     'port' => env('DB_PORT', '3306'),
     'database' => env('DB_DATABASE', 'forge'),
     'username' => env('DB_USERNAME', 'forge'),
     'password' => env('DB_PASSWORD', ''),
     'unix_socket' => env('DB_SOCKET', ''),
     'charset' => 'utf8mb4',
     'collation' => 'utf8mb4_unicode_ci',
     'prefix' => '',
     'strict' => true,
     'engine' => null,
     'options'   => [PDO::ATTR_PERSISTENT => false], // 关闭持久连接
    ],
  2. 定时清理连接:
    你可以在 Laravel 定时任务中加入一些代码来主动清理数据库连接。例如:
use Illuminate\Support\Facades\DB;

// ...

DB::disconnect('mysql'); // 断开 MySQL 连接

你可以在定时任务中按照一定的逻辑调用 DB::disconnect 断开连接。这可以在长时间运行的应用中释放一些资源。

  1. Windows 系统缓存设置:
    在 Windows 系统上,你可以尝试增加系统的缓冲区空间。这可以通过修改注册表进行。打开注册表编辑器(regedit),找到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

在右侧窗口新建 DWORD 值(32 位),命名为 MaxUserPort,并设置数值数据为一个较大的值,比如 65534。然后重启系统。

请注意,在调整系统设置时,一定要小心谨慎,确保你知道每个设置的影响。最好在调整之前备份相关的配置。

1年前 评论
随波逐流

如果条件允许,重新做一个 linux 系统

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!