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