kernel TCP time wait bucket table overflow

 

# 故障描述

有一個需求是實時分析API接口訪問日誌,提取token去數據庫查詢對應的uid,而後收集一些指標存入到hbase中。

當程序執行一會後會被系統殺死 Killed ! 

# 故障排查

1、CPU平均負載0.06、內存空閒29G

2、查看系統日誌 /var/log/messages

提示:kernel: TCP: time wait bucket table overflow

3、查找資料發現是由於 socket TIME_WAIT 超出了內核設定的上限值

# 解決方法

shell > vim /etc/sysctl.conf

net.ipv4.tcp_fin_timeout = 60       # 若是套接字由本端要求關閉,這個參數決定了它保持在 FIN-WAIT-2 狀態的時間,縮短能夠減小 TIME_WAIT 狀態數量

net.ipv4.tcp_max_tw_buckets = 5000  # TIME_WAIT 數量,超出的部分會被系統刪除

net.ipv4.tcp_timestamps = 1         # 該參數與快速回收同時開啓且網絡環境屬於NAT(SLB、LVS)這種狀況下會出現問題,切記
net.ipv4.tcp_tw_reuse = 0           # 鏈接重用,下降 TIME_WAIT 狀態數量
net.ipv4.tcp_tw_recycle = 0         # 快速回收 不建議開啓,有可能致使沒法創建 TCP 鏈接

net.ipv4.ip_local_port_range = 32768 60999  # 本地可用端口範圍,增長會使服務器能夠創建更多的鏈接,增長吞吐量

# 因此優化的結果以下:

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 60999
相關文章
相關標籤/搜索