早前使用PHP+Mysql+apache
在windows平台做过一个指纹机考勤签到的系统在最近频繁出现系统访问缓慢,甚至崩溃的问题。通过日志文件,发现很多无法链接Mysql的报错信息
发现问题
用命令查看端口情况:
netstat -ano | findstr "3306"
发现 Mysql 的 3306 端口存在大量 TIME_WAIT
状态连接,考虑到近期考勤人数的突然增多,且指纹机打卡为实时上传等原因,初步猜测是在短时间内指纹机大量请求接口操作数据库,而端口并未释放所导致。
解决问题
修改Mysql配置
[mysqld]
# 服务器关闭交互式连接前等待活动的秒数
interactive_timeout=30
# 服务器关闭非交互连接之前等待活动的秒数
wait_timeout=30
注意:需要同时配置interactive_timeout与wait_timeout才可生效!
修改Windows服务器TCP连接配置
由于Windows下默认Socket连接为5000个,且预设TIME_WAIT时间为4分钟。我们同时需要修改服务器配置。
打开注册表 regedit
找到路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在该路径下修改或新建注册表
类型: DWORD值
名称:MaxUserPort
值(十进制):65543
类型: DWORD值
名称:TcpTimedWaitDelay
值(十进制):30
保存后重启Windows服务器,发现3306的 TIME_WAIT
端口数量正常,项目恢复正常使用。
网友评论