Mysql出现大量TIME_WAIT状态端口占用的解决方法

早前使用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端口数量正常,项目恢复正常使用。

你可能感兴趣的:(Mysql出现大量TIME_WAIT状态端口占用的解决方法)