沒想到TOE也能成為TCP崩潰的元凶。
服務器是一台很古老的機器,用作Web服務器。網卡是BCM5708,具有各種卸載功能,包括TCP卸載,但是,這個卸載功能的能力是非常有限的,按照Broadcom的描述,當等待卸載的TCP連接超過網卡卸載能力時(按照說明,大概千兆網卡是1024個,萬兆網卡是1600個),就會移交給操作系統,由CPU處理。但是問題就出現在這里了。
這台機器的TCP並發連接數大概平均1500~2500個之間,其中TCPv4連接大概1300~2000個之間,超過了網卡的卸載能力。除了有時候網頁打開會卡住外,還出現了嚴重的自動重啟現象,頻繁是每天十幾次重啟,而且不會留下任何日志信息,給問題分析帶來很大困難。后來安裝了Broadcom網卡工具,關閉了網卡的TOE功能才恢復正常,CPU占用率並沒有明顯提高。
現在只能推測,要么網卡的TOE部分硬件壞掉,要么Broadcom的硬件設計或者驅動存在問題,導致連接數超過TOE處理能力時服務器出現嚴重問題。
查閱了很多關於TOE的資料,也說明了TOE不適合高連接數、小文件的Web服務器類應用,所以建議Web服務器還是關閉TOE功能吧。