問題:
沒有佔用多少流量,但是網絡連接很慢,ping超時。已發現被大量不同的機器訪問導致tcp連接數非常高,nf_conntrack滿了
nf_conntrack滿之解決方法
(2016-08-09 17:27:36)
分類: Linux |
vim /var/log/message報錯
nf_conntrack: table full, dropping packet
先關掉iptables
/etc/init.d/iptables stop
查看當前的連接數:
# grep nf_conntrack /proc/slabinfo
查出目前 nf_conntrack 的排名:
$ cat /proc/net/nf_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10
優化參數
狀態跟蹤表的最大行數的設定,理論最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
以64G的64位操作系統爲例,CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152
即時生效請執行:
sysctl –w net.netfilter.nf_conntrack_max = 524288 (16G)
其哈希表大小通常爲總表的1/8,最大爲1/2。CONNTRACK_BUCKETS = CONNTRACK_MAX / 8
同樣64G的64位操作系統,哈希最佳範圍是 262144 ~ 1048576 。
運行狀態中通過 sysctl net.netfilter.nf_conntrack_buckets 進行查看,通過文件 /sys/module/nf_conntrack/parameters/hashsize 進行設置
或者新建 /etc/modprobe.d/iptables.conf ,重新加載模塊才生效:
options nf_conntrack hashsize = 262144
還有些相關的系統參數`sysctl -a | grep nf_conntrack`可以調優(/etc/sysctl.conf ):
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.ip_conntrack_tcp_timeout_established = 3600
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120