zoukankan      html  css  js  c++  java
  • Nginx/Apache服务连接数梳理

     

     

    统计连接数,使用netstat命令或ss命令都可以
    1)统计连接数(80端口)
    [root@wang ~]# netstat -nat|grep -i "80"|wc -l
    872

    或者:netstat -ant | grep $ip:80 | wc -l 
    [root@wang ~]# netstat -ant | grep 111.142.132.192:80 | wc -l 
    872

    2)查看当前并发访问数(统计已连接上的),状态为“ESTABLISHED”
    [root@wang ~]# netstat -na|grep ESTABLISHED|wc -l
    405

    或者:
    [root@wang ~]# netstat -ant | grep 111.142.132.192:80 | grep EST | wc -l

    3)查看IP访问次数 
    [root@wang ~]# netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n

    查看ip连接数(成功连接上的)
    [root@wang ~]# netstat -nat |grep ESTABLISHED | awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20

    4)查看并发请求数(服务器连接数)及其TCP连接状态:
    [root@wang ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
    FIN_WAIT2 34
    CLOSING 1
    SYN_RECV 73
    CLOSE_WAIT 9
    TIME_WAIT 139
    ESTABLISHED 302
    LAST_ACK 7
    FIN_WAIT1 11

    结果解释: 
    SYN_RECV          表示正在等待处理的请求数; 
    ESTABLISHED     表示正常数据传输状态; 
    TIME_WAIT         表示处理完毕,等待超时结束的请求数; 
    FIN_WAIT1         表示server端主动要求关闭tcp连接; 
    FIN_WAIT2         表示客户端中断连接; 
    LAST_ACK         表示关闭一个TCP连接需要从两个方向上分别进行关闭,双方都是通过发送FIN来表示单方向数据的关闭,当通信双方发送了最后一个FIN的时候,发送方此时处于LAST_ACK状态,当发送方收到对方的确认(Fin的Ack确认)后才真正关闭整个TCP连接; 
    CLOSING        表示两边同时尝试关闭

    或者执行下面的命令:会出现一个界面,实时统计并发连接数和TCP连接数
    [root@wang ~]# watch "netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'"

    5)查找较多time_wait连接,降序排列
    [root@wang ~]# netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

    ------------------------------------------------------------------------------------------------
    上面是使用netstat命令进行统计查看的,也可以使用ss命令查看。
    netstat和ss命令的区别,可以参考:http://www.cnblogs.com/kevingrace/p/6211509.html
    [root@wang ~]# ss -a|wc -l
    746
    [root@wang ~]# ss -a|grep ESTAB|wc -l
    358
    [root@wang ~]# ss -a|grep TIME-WAIT|wc -l
    146

    -----------------------------------------------------------------------------------------------
    如发现系统存在大量TIME_WAIT状态的连接,该怎么办?
    根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方socket将进入TIME_WAIT状态,TIME_WAIT状态下的socket不能被回收使用。具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务. TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证.

    解决办法(参考:http://www.cnblogs.com/kevingrace/p/6094007.html):
    通过调整内核参数解决,编辑/etc/sysctl.conf文件,添加下面四行内容:
    [root@wang ~]# 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

    配置说明:
    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时间

    让添加的参数生效
    [root@wang ~]# /sbin/sysctl -p

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1

    vm.swappiness = 0
    net.ipv4.neigh.default.gc_stale_time=120
    net.ipv4.conf.all.rp_filter=0
    net.ipv4.conf.default.rp_filter=0
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce=2
    net.ipv4.conf.all.arp_announce=2
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 1024
    net.ipv4.tcp_synack_retries = 2

  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/7852766.html
Copyright © 2011-2022 走看看