web运维中http并发和tcp连接数的监控与调优笔记
作为web运维,在网站访问慢的时候,要能迅速查找慢的原因,这其中,检查web状态至关重要,web状态是指目前网站的并发数、等待数、QPS/TPS等信息,如何获取这些状态信息呢,需要使用多个命令组合来完成,本节就web日常运维中经常用到的一些命令和组合分享给大家,作为web运维的调优依据。
1、查看TCP连接状态
常用的命令如何有如下一些:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' netstt -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}' netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}' netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
上面这些命令的输出内容大致一样,只是输出方式不同而已,各取所好即可。例如:
[root@test ~]# netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn 1739 ESTABLISHED 159 TIME_WAIT 7 FIN_WAIT1 2 LAST_ACK 2 CLOSE_WAIT 1 SYN_RECV
从输出可以看到,这些都是TCP的连接状态,第一列输出的是每个连接状态的目前连接数量,第二列对应的是目前的TCP连接状态。
至于含义,上面第二节中已经介绍了很详细了。那么重点要注意的是TIME_WAIT,这个TIME_WAIT是指在四次挥手过程中,首先调用关闭连接发起的一方,在发送最后一个ACK之后就会进入TIME_WAIT的状态,过多的TIME_WAIT连接,有什么坏处呢,我们来解释一下:
在高并发短连接的TCP服务器上,当服务器处理完请求后,会立刻主动正常关闭连接,此时就会出现大量socket处于TIME_WAIT状态,如果客户端的并发量持续增高,此时部分客户端就会显示连接不上服务器,为什么呢,因为服务器端资源用完了。这里的资源主要指服务器临时连接端口。
服务器可用的端口有个0~65535这么多,其实这真的很少,再刨除系统和其他服务要用的,剩下的就更少了。而高并发短连接场景可以让服务器在短时间范围内同时占用大量端口。
举个例子:
比如访问一个web页面,一秒钟的http短连接处理完成后,在关闭连接之后,这个业务用过的端口会停留在TIME_WAIT状态几分钟,而这几分钟,其它HTTP请求过来的时候是无法占用此端口的(典型的占着茅坑不。。。)。如果此时监控服务器的利用率会发现,服务器干正经事的时间和端口(资源)被挂着无法被使用的时间比例是1比几百,这就导致服务器资源严重浪费。
所以,过多的TIME_WAIT严重影响业务的正常运行。
2、查找较多TIME_WAIT、SYN连接的IP
这个命令比较常用,命令组合如下:
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20例如:
[root@localhost ~]# netstat -n|grep TIME_WAIT|awk...
点击查看剩余70%
网友评论