天天看點

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 

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指令檢視。

[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不會受到之前殘留的延遲重發封包影響的機制,是必要的邏輯保證.

通過調整核心參數解決,編輯/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

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6211542.html,如需轉載請自行聯系原作者

繼續閱讀