免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6778 | 回复: 13
打印 上一主题 下一主题

[Web] time_wait高怎么解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 15:03 |只看该作者 |倒序浏览
我前几天从apache换成nginx,现在的time_wait很高,我找网上的优化过,可是还是很高,TIME_WAIT 9272
CLOSE_WAIT 5
FIN_WAIT1 40
FIN_WAIT2 7
ESTABLISHED 305
SYN_RECV 23
CLOSING 15
LAST_ACK 2
我的sysctl优化的参数是
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_fin_timeout = 1
我不知道哪里不对,还是哪有有问题,现在就是内存都吃没了,希望大家可以帮我看看!

论坛徽章:
0
2 [报告]
发表于 2009-12-22 16:59 |只看该作者
除了调整内核参数外 可以结合自己WEB的情况 调整下nginx的timeout情况
http://wiki.nginx.org/Special:Se ... amp;fulltext=Search

论坛徽章:
0
3 [报告]
发表于 2009-12-22 17:38 |只看该作者
原帖由 hdl147 于 2009-12-22 15:03 发表
我前几天从apache换成nginx,现在的time_wait很高,我找网上的优化过,可是还是很高,TIME_WAIT 9272
CLOSE_WAIT 5
FIN_WAIT1 40
FIN_WAIT2 7
ESTABLISHED 305
SYN_RECV 23
CLOSING 15
LAST_ACK 2
我的 ...



<转>

发现大量的TIME_WAIT解决办法


版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://kerry.blog.51cto.com/172631/105233
        今天早上一上班,有同事就反映公司好几个网站都打不开,登陆数据库
服务器(windows),发现很卡,于是重启了下服务器,进入系统后,没过一会问题依旧,查看了下系统进程,发现mysql占用率达到99%,可以肯定的是mysql连接出现问题:
netstat -an
192.168.12.13:3306      192.168.12.12:30443      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30444      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30445      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30446      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30447      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30448      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30449      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30450      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30451      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30452      TIME_WAIT
... ...
      根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务. TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证.

登陆到web服务器(linux):
   
     netstat -ae |grep mysql
     tcp        0      0 aaaa:53045               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53044               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53051               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53050               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53049               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53048               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53055               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53054               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53053               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53052               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53059               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53058               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53057               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53056               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53063               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53062               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53061               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53060               192.168.12.3:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53067               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53066               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53065               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53064               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa53071               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53070               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53069               192.168.12.13:mysql           TIME_WAIT   root       0
发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vi /etc/sysctl.conf

编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

修改之后,再用
netstat -ae|grep mysql
tcp        0      0 aaaa:50408               192.168.12.13:mysql           ESTABLISHED nobody     3224651
tcp        0      0 aaaa:50417               192.168.12.13:mysql           ESTABLISHED nobody     3224673
tcp        0      0 aaaa:50419               192.168.12.13:mysql           ESTABLISHED nobody     3224675

       发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,各网站访问正常!!
       以上只是暂时的解决方法,最后仔细巡查发现是前天新上线的一个系统,程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT  


楼主注意最后一段话。

论坛徽章:
0
4 [报告]
发表于 2009-12-22 18:03 |只看该作者

回复 #3 blueswxs 的帖子

首先谢谢你,谢谢你给我说了这个情况,你的优化参数我已经有了,我问程序了是没有这个mysql.colse(),但是程序问我是不是可以确定是这个问题,我不敢说,用netstat -ae|grep mysql 的确是很多的mysql的,郁闷呀,让我继续监控!

论坛徽章:
0
5 [报告]
发表于 2009-12-22 18:17 |只看该作者
原帖由 hdl147 于 2009-12-22 15:03 发表
我前几天从apache换成nginx,现在的time_wait很高,我找网上的优化过,可是还是很高,TIME_WAIT 9272
CLOSE_WAIT 5
FIN_WAIT1 40
FIN_WAIT2 7
ESTABLISHED 305
SYN_RECV 23
CLOSING 15
LAST_ACK 2
我的 ...

ps -aux 看看哪个程序在吃内存,大量的TIME_WAIT 不会吃那么多的内存,所以还是某些程序有问题.看看你的mysql配置

论坛徽章:
0
6 [报告]
发表于 2009-12-22 18:20 |只看该作者
原帖由 hdl147 于 2009-12-22 18:03 发表
首先谢谢你,谢谢你给我说了这个情况,你的优化参数我已经有了,我问程序了是没有这个mysql.colse(),但是程序问我是不是可以确定是这个问题,我不敢说,用netstat -ae|grep mysql 的确是很多的mysql的,郁闷呀 ...

strace 一下你的 mysql进程都在做什么,是否应该优化了呢,打开mysql慢日志,看看你的sql是否都在准许范围内.

论坛徽章:
0
7 [报告]
发表于 2009-12-22 18:37 |只看该作者

回复 #5 7717060 的帖子

哥们给我说说用ps aux 怎么看内存的呀,我用top基本上的php-cgi 的0.2%也没有那么多的呀,我的是8G的内存。cpu用的很少!!大哥帮帮忙哦!

论坛徽章:
0
8 [报告]
发表于 2009-12-22 18:42 |只看该作者

回复 #6 7717060 的帖子

大哥,我的数据库,没有在这个机器上分开的。我看过了,没有慢查询。也就是说进游戏的速度很不错的。就是我用free -m基本上没有空闲的内存了。现在的问题就是time——wate很高。

论坛徽章:
0
9 [报告]
发表于 2009-12-22 18:57 |只看该作者
原帖由 hdl147 于 2009-12-22 18:37 发表
哥们给我说说用ps aux 怎么看内存的呀,我用top基本上的php-cgi 的0.2%也没有那么多的呀,我的是8G的内存。cpu用的很少!!大哥帮帮忙哦!

ps -aux | more
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND

论坛徽章:
0
10 [报告]
发表于 2009-12-22 19:02 |只看该作者
原帖由 hdl147 于 2009-12-22 18:42 发表
大哥,我的数据库,没有在这个机器上分开的。我看过了,没有慢查询。也就是说进游戏的速度很不错的。就是我用free -m基本上没有空闲的内存了。现在的问题就是time——wate很高。

你说的是现在就是内存都吃没了
我的

[wds@ssoapollo53 ~]# netstat -tn | grep TIME_WAIT    | wc -l  
9956

[wds@ssoapollo53 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3948       3690        258          0        149       3130

[wds@ssoapollo53 ~]# uptime
19:00:26 up 389 days,  9:07,  1 user,  load average: 2.00, 1.55, 1.30

看到我的 TIME_WAIT 也很高,但是内存缺没费那么多,所以说不是 TIME_WAIT 问题

应该是你程序或mysql的配置的问题,我觉的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP