美文网首页
Mysql出现大量TIME_WAIT状态端口占用的解决方法

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

作者: jzaaa | 来源:发表于2018-08-22 14:59 被阅读0次

    早前使用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状态端口占用的解决方法

          本文链接:https://www.haomeiwen.com/subject/rzxyiftx.html