Linux NAT哈希表滿導致服務器丟包

發現ECS Linux服務器出現間歇性丟包的情況,通過tracert、mtr等手段排查,外部網絡未見異常。

同時,如下圖所示,在系統日誌中重複出現大量如下錯誤信息:

Jun 13 15:20:23 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:24 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:24 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.
Jun 13 15:20:25 web3 kernel: nf_conntrack: table full, dropping packet.

ip_conntrack是Linux系統內NAT的一個跟蹤連接條目的模塊。ip_conntrack模塊會使用一個哈希表記錄 tcp 通訊協議的 established connection記錄,當這個哈希表滿了的時候,便會導致nf_conntrack: table full, dropping packet錯誤。

在Centos 5.x上是如下的設置:

用戶可以嘗試通過修改如下內核參數來調整ip_conntrack限制。操作方式簡述如下:

1. 在終端下輸入如下指令編輯系統內核配置:

# vi /etc/sysctl.conf

2. 設置或修改如下參數:

#哈希表項最大值

net.ipv4.netfilter.ip_conntrack_max = 655350

#超時時間,默認情況下 timeout 是5天(432000秒)

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200

3. 在終端下輸入如下指令使上述配置生效:

#sysctl -p

在Centos 6.x上是上是如下的設置:

1. 在終端下輸入如下指令編輯系統內核配置:

# vi /etc/sysctl.conf

2. 設置或修改如下參數:

#哈希表項最大值

net.netfilter.nf_conntrack_max = 655350

#超時時間,默認情況下 timeout 是5天(432000秒)

net.netfilter.nf_conntrack_tcp_timeout_established = 1200

3. 在終端下輸入如下指令使上述配置生效:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章