之前寫(xiě)過(guò)一篇關(guān)于apache的并發(fā)請(qǐng)求的文章,如今更深入的研究了一下,給大家分享,自己也做個(gè)筆記了。
上次說(shuō)到這個(gè)牛逼的語(yǔ)句
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
FIN_WAIT_1 286
FIN_WAIT_2 960
SYN_SENT 3
LAST_ACK 32
CLOSING 1
CLOSED 36
SYN_RCVD 144
TIME_WAIT 2520
ESTABLISHED 352
返回參數(shù)的說(shuō)明如下:
CLOSED:無(wú)連接是活動(dòng)的或正在進(jìn)行
LISTEN:服務(wù)器在等待進(jìn)入呼叫
SYN_RECV:一個(gè)連接請(qǐng)求已經(jīng)到達(dá),等待確認(rèn)
SYN_SENT:應(yīng)用已經(jīng)開(kāi)始,打開(kāi)一個(gè)連接
ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
FIN_WAIT1:應(yīng)用說(shuō)它已經(jīng)完成
FIN_WAIT2:另一邊已同意釋放
TIME_WAIT:等待所有分組死掉
CLOSING:兩邊同時(shí)嘗試關(guān)閉
TIME_WAIT:另一邊已初始化一個(gè)釋放
LAST_ACK:等待所有分組死掉
TCP變遷圖:
pache服務(wù)器的fin_wait1過(guò)多time_wait過(guò)多問(wèn)題解決
1、fin_wait1狀態(tài)過(guò)多。fin_wait1狀態(tài)是在server端主動(dòng)要求關(guān)閉tcp連接,并且主動(dòng)發(fā)送fin以后,等待client端回復(fù)ack時(shí)候的狀態(tài)。fin_wait1的產(chǎn)生原因有很多,需要結(jié)合netstat的狀態(tài)來(lái)分析。
上面的命令可以幫助分析哪種tcp狀態(tài)數(shù)量異常
則可以幫助你將請(qǐng)求80服務(wù)的client ip按照連接數(shù)排序。
2、time_wait狀態(tài)過(guò)多。
通常表現(xiàn)為apache服務(wù)器負(fù)載高,w命令顯示load average可能上百,但是web服務(wù)基本沒(méi)有問(wèn)題。同時(shí)ssh能夠登陸,但是反應(yīng)非常遲鈍。
原因:最可能的原因是httpd.conf里面keepalive沒(méi)有開(kāi),導(dǎo)致每次請(qǐng)求都要建立新的tcp連接,請(qǐng)求完成以后關(guān)閉,增加了很多time_wait的狀態(tài)。另,keepalive可能會(huì)增加一部分內(nèi)存的開(kāi)銷,但是問(wèn)題不大。
分析:如果發(fā)現(xiàn)fin_wait1狀態(tài)很多,并且client ip分布正常,那可能是有人用肉雞進(jìn)行ddos攻擊、又或者最近的程序改動(dòng)引起了問(wèn)題。一般說(shuō)來(lái)后者可能性更大,應(yīng)該主動(dòng)聯(lián)系程序員解決。
但是如果有某個(gè)ip連接數(shù)非常多,就值得注意了,可以考慮用iptables直接封了他。
查IP的關(guān)于80端口的連接數(shù)可以用:
netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
可以看到目前IP的連接數(shù)。太多的,就要注意了。
此外再分享一個(gè)實(shí)時(shí)查看apache并發(fā)數(shù)的:
watch -n 1 -d "pgrep httpd|wc -l",冒號(hào)里的語(yǔ)句可以自己調(diào)啦~
當(dāng)然目前我還有幾個(gè)沒(méi)搞清楚的問(wèn)題,希望大家能教教我哈~
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
