大數據量衝擊下Windows網卡異常分析定位

背景

mqtt的服務端ActiveMQ在windows上,多臺PC機客戶端不停地向MQ發送消息。html

現象

觀察MQ本身的日誌data/activemq.log裏顯示,TCP連接皆異常斷開。此時嘗試從服務端ping其餘客戶端,發現皆沒法ping通。可知服務端網卡一定故障沒法正常運做。linux

定位思路

  • 原有的組網採用多PC經過hub互聯,工做方式上講hub是廣播模式,多PC大數據量發送必然引起廣播風暴,使網卡超載運行直至異常
  • 改成百兆交換機後,交換機可以隔離衝突域,數據交互狀況明顯有所好轉。但仍偶現網卡故障的狀況。
  • 參考linux的網卡收包理論,經過修改conf/activemq.xml,爲Mqtt_Uri加上transport.ioBufferSize=1048576&transport.socketBufferSize=4194304。調整服務端MQ的接收socketBuffer爲4M,此後網卡可以保持長期正常運行。說明增長socketBuffer能夠減緩網卡往內存塞包的壓力,下降網卡丟包又引起重傳的惡性循環的可能,但也證實此時網卡的負載能力已瀕臨臨界點
  • 與此同時,觀察windows的任務管理器聯網這一項下,發現大數據量發送時網絡使用率基本持續在100%,證實網卡已近超載的猜測正確。
  • 服務器的網卡自己是千兆網卡,但經過Auto-negotiation降速爲了百兆。將百兆交換機更換爲千兆交換機,任務管理器裏觀察到線路速度顯示爲1Gbps,網絡使用率明顯未超過10%。此後數據收發長期正常,證實網卡超載運行的狀況已經解決。

參考資料

集線器、交換機和路由器的區別(詳細)windows

Diving into the Linux Networking Stack, Part I服務器

Network Buffers And Memory Management網絡

相關文章
相關標籤/搜索