Linux下Apache查看网络连接数情况

kevin.Zhu 发布于:2013-1-16 11:28 分类:Linux  有 11 人浏览,获得评论 0 条  

经常检查apache的连接数,同样会发现很多无用的time_wait连接。有人说这是正常的,是因为一个请求中途中断造成的;还有人说微软的IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的,如果超过了连接数的比例就不是很正常,所以还是找来方法解决一下。   

  检查net.ipv4.tcp_tw当前值,将当前的值更改为1分钟:

[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw

net.ipv4.tcp_tw_reuse = 0

net.ipv4.tcp_tw_recycle = 0

[root@aaa1 ~]# vi /etc/sysctl.conf

增加或修改net.ipv4.tcp_tw值:

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

 

使内核参数生效:

[root@aaa1 ~]# sysctl -p

 

[root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

 

设置这两个参数: reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recyse是加速TIME-WAIT sockets回收

 

用netstat再观察正常

这里解决问题的关键是如何能够重复利用time_wait的值,我们可以设置时检查一下time和wait的值

#sysctl -a | grep time | grep wait

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

 

结合DDOS和TIME_WAIT过多,建议增加如下参数设置:

 

# by supernic

# Use TCP syncookies when needed

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_synack_retries=3

net.ipv4.tcp_syn_retries=3

net.ipv4.tcp_max_syn_backlog=2048

# Enable TCP window scaling

net.ipv4.tcp_window_scaling: = 1

# Increase TCP max buffer size

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

# Increase Linux autotuning TCP buffer limits

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

# Increase number of ports available

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 5000 65000

 

查看当前的连接数状况可以使用:

netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n

这条语句返回结果如下

      1 established

      1 State

      2 LAST_ACK

      4 CLOSING

      4 FIN_WAIT2

      9 LISTEN

     17 FIN_WAIT1

     18 SYN_RECV

     27 ESTABLISHED

    811 TIME_WAIT

 

  上面的命令可以帮助分析哪种tcp状态数量异常

 

  其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

返回的结果非常简洁直接,就是句子有点长 -_-

 

netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n

可以按IP连接数列出当前状况,发现异常的,可以封了这个IP