如何判断是否丢掉用户请求
原文地址:http://blog.sina.com.cn/s/blog_5374d6e30101lex3.html
有一個同事找我,他懷疑服務(wù)器的http連接過多,造成一些請求丟失,從而丟失了日志,但不知道怎么看,讓幫忙確認(rèn)一下。
下面是可能丟數(shù)據(jù)包的點(diǎn):
1、交換機(jī)
上連和下連端口的流量跑滿或鏈路有問題,有些數(shù)據(jù)包會被交換機(jī)丟掉,抓對應(yīng)端口的丟包計數(shù)值就可以獲得這方面的數(shù)據(jù)。當(dāng)然,不會每次都丟建立連接的syn數(shù)據(jù)包,另外,客戶端也重傳數(shù)據(jù)包,所以這一塊不一定會導(dǎo)致請求數(shù)據(jù)的丟失,但可以作為參考。
2、負(fù)載均衡設(shè)備
這個跟上面的交換機(jī)類似,但除了有出錯的數(shù)據(jù)包方面的數(shù)據(jù),還有出錯的連接方面的數(shù)據(jù)。抓取方法呢,完全設(shè)備相關(guān),不在這里說了。
3、操作系統(tǒng)處理不過來,丟棄數(shù)據(jù)
這里有兩部分,一是網(wǎng)卡見操作系統(tǒng)處理不過來,丟數(shù)據(jù)包,可以讀取下面的文件:
/proc/net/dev
每個網(wǎng)絡(luò)接口一行統(tǒng)計數(shù)據(jù),4列是接收出錯的數(shù)據(jù)包數(shù)量,5列是接收不過來丟棄的數(shù)量。
第二部分是傳統(tǒng)非NAPI接口實(shí)現(xiàn)的網(wǎng)卡驅(qū)動,每個cpu有一個隊列,當(dāng)在隊列中緩存的數(shù)據(jù)包數(shù)量超過netdev_max_backlog(sysctl-w net.core.netdev_max_backlog可以修改)限制時,網(wǎng)卡驅(qū)動程序會丟掉數(shù)據(jù)包,這個見下面的文件:
/proc/net/softnet_stat
每個cpu有一行統(tǒng)計數(shù)據(jù),第二列是對應(yīng)cpu丟棄的數(shù)據(jù)包數(shù)量。
4、應(yīng)用程序處理不過來,操作系統(tǒng)丟棄
內(nèi)核中記錄了兩個計數(shù)器:ListenOverflows,ListenDrops
ListenOverflows:對應(yīng)socket的listenqueue已滿的情況下,需要新增一個連接時的情況,一般是應(yīng)用程序處理不過來的情況;
ListenDrops:包含上面的情況,也就是說當(dāng)出現(xiàn)ListenOverflows時,它也會增加1;除此之外,當(dāng)內(nèi)存不夠無法為新的連接分配socket相關(guān)的數(shù)據(jù)結(jié)構(gòu)時,也會增加1,當(dāng)然還有別的異常情況下會增加1。
對應(yīng)的數(shù)據(jù)在下面的文件中:/proc/net/netstat21列是ListenOverflows值,22列是ListenDrops值。
用下面命令,可以直接顯示這兩個數(shù):
cat /proc/net/netstat | awk '/TcpExt/ { print $21,$22}'
如果是netstat命令,則看“times the listen queue of a socketoverflowed”, “SYNs to LISTEN socketsignored”對應(yīng)行前面的數(shù)字。如果沒有對應(yīng)的行,則表明對應(yīng)的數(shù)值為0。如果是0,netstat則不會輸出對應(yīng)的行。
轉(zhuǎn)載于:https://blog.51cto.com/chenhj/1264913
總結(jié)
以上是生活随笔為你收集整理的如何判断是否丢掉用户请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM1176JZF-S/S3C6410
- 下一篇: Producing Open Sourc