form1.cn
Make a little progress every day

查看linux中的TCP的各种连接数

08th of August 2017 Java Java 4463

统计80端口连接数

netstat -nat|grep -i "80"|wc -l


统计httpd协议连接数,也可统计nginx

ps -ef|grep httpd|wc -l


统计已连接上的,状态为 established

netstat -na|grep ESTABLISHED|wc -l


查看系统tcp连接中各个状态的连接数

netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'


查看和本机80端口建立连接并状态在established的所有ip

netstat -an |grep 80 |grep ESTA |awk '{print$5 "\n"}' |awk 'BEGIN {FS=":"} {print $1 "\n"}' |sort |uniq


输出每个ip的连接数,以及总的各个状态的连接数。

netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n",a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}'

状态:描述


  CLOSED:无连接是活动 的或正在进行


  LISTEN:服务器在等待进入呼叫


  SYN_RECV:一个连接请求已经到达,等待确认


  SYN_SENT:应用已经开始,打开一个连接


  ESTABLISHED:正常数据传输状态


  FIN_WAIT1:应用说它已经完成


  FIN_WAIT2:另一边已同意释放


  ITMED_WAIT:等待所有分组死掉


  CLOSING:两边同时尝试关闭


  TIME_WAIT:另一边已初始化一个释放


  LAST_ACK:等待所有分组死掉



如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,

vim /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 时间

下面附上TIME_WAIT状态的意义:


客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口

状态为TIME_WAIT