http併發和tcp連線數的監控與調優

2021-10-08 06:53:35 字數 3934 閱讀 7409

在**訪問慢的時候,要能迅速查詢慢的原因,這其中,檢查web狀態至關重要,web狀態是指目前**的併發數、等待數、qps/tps等資訊,如何獲取這些狀態資訊呢,需要使用多個命令組合來完成,這裡就web日常運維中經常用到的一些命令和組合分享給大家,作為調優依據。

1、檢視tcp連線狀態

netstat -nat |awk ''|sort|uniq -c|sort -rn

netstat -n |awk '/^tcp/ '|sort|uniq -c|sort -rn

netstat -n | awk '/^tcp/ ;end '

netstat -n | awk '/^tcp/ ; end '

netstat -n | awk '/^tcp/ ;end '

netstat -ant | awk '' | grep -v '[a-z]' | sort | uniq -c

上面這些命令的輸出內容大致一樣,只是輸出方式不同而已,各取所好即可。例如:

[root@test ~]# netstat -n |awk '/^tcp/ '|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 ''|sort|uniq -c|sort -rn|head -n20

例如:[root@localhost ~]# netstat -n|grep time_wait|awk ''|sort|uniq -c|sort -rn|head -n20

1 94.191.97.234:64866

1 94.191.93.141:57715

1 94.191.91.162:54785

還可以使用這個命令組合:

netstat -an | grep syn | awk '' | awk -f: '' | sort | uniq -c | sort -nr | more

例如:[root@localhost ~]# netstat -an | grep syn | awk '' | awk -f: '' | sort | uniq -c | sort -nr | more

2 60.190.233.106

2 39.179.58.66

3、用tcpdump嗅探80埠看看哪個ip訪問最頻繁

通過tcpdump命令集合awk過濾來實現:

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -f"." '' | sort | uniq -c | sort -nr |head -n 20

來看個例子:

[root@test ~]# tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -f"." '' | sort | uniq -c | sort -nr |head -n 20

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type en10mb (ethernet), capture size 65535 bytes

1000 packets captured

1000 packets received by filter

0 packets dropped by kernel

290 ip 183.215.254.13

264 ip 111.39.161.182

251 ip 211.143.17.76

4、查詢請求數請10個ip

這個命令組合常用來查詢**攻 擊**ip,命令如下:

netstat -anlp|grep 80|grep tcp|awk ''|awk -f: ''|sort|uniq -c|sort -nr|head -n10

netstat -ant |awk '/:80/end' |sort -rn|head -n10

這個命令最經常使用,特別是當**訪問量莫名公升高的時候,例如:

[root@test ~]# netstat -anlp|grep 80|grep tcp|awk ''|awk -f: ''|sort|uniq -c|sort -nr|head -n5

124 27.148.154.216

85 27.148.154.162

82 27.148.154.217

81 27.148.154.159

78 221.235.244.60

5、檢視有哪些爬蟲在抓取我的**6、獲取訪問次數最多的檔案或頁面,取前10

先來看個例子:

[root@test logs]# cat miivey_access.log |awk ''|sort|uniq -c|sort -nr|head -n 10

12817067 ""

1279583 "cn/"

387843 ""

335286 "cn/m/index.html"

這個命令組合主要是讀取日誌檔案,然後獲取訪問量最高的檔案或頁面。

7、統計http連線狀態

首先統計出日誌中所有的連線狀態碼,以及每個狀態碼的數量:

[root@test logs]# cat miivey_access.log |awk ''|sort|uniq -c|sort -rn

457030 200

17035 404

2189 304

1953 499

426 405

可以看出,狀態碼為200的數量有457030個,狀態碼為404的數量為17035,也非常多,這麼多的404狀態,肯定會對**有影響,那麼接下來就看看就有哪些404頁面:

[root@test logs]# awk '($9 ~/404/)' miivey_access.log | awk '' | sort

404 /zzb.php

404

404

404

404

這個命令組合中,主要是撲獲訪問出現404狀態的頁面是哪些,從輸出可以看到哪些頁面是404,找到了具體的頁面,就可以進行具體的處理了。

http併發和tcp連線數的監控與調優

在 訪問慢的時候,要能迅速查詢慢的原因,這其中,檢查web狀態至關重要,web狀態是指目前 的併發數 等待數 qps tps等資訊,如何獲取這些狀態資訊呢,需要使用多個命令組合來完成,這裡就web日常運維中經常用到的一些命令和組合分享給大家,作為調優依據。1 檢視tcp連線狀態 netstat na...

Cacti監控Tcp併發連線數

我的環境是 version0.8.7i 步驟一 開啟get tcp connections,修改一下cactidir的路徑成你的實際路徑哦.步驟二 進入cacti後台,import export import templates 匯入cacti graph template tcp connecti...

zabbix3 0對tcp連線數和狀態的監控優化

zabbix3.0對tcp連線數及狀態的監控優化 之前對tcp的監控採用netstat命令,發現在伺服器繁忙的時候效果不理想,這個命令占用大量的cpu有時候高達90 以上,可能會導致業務的不穩定,所以改用ss命令對指令碼進行優化 在需要被監控的zabbix agent端新增指令碼編寫 建立資料夾 m...