Linux實例NAT哈希表滿導(dǎo)致ECS實例丟包
發(fā)布時間:2021-04-08 點擊數(shù):781
問題現(xiàn)象
Linux實例出現(xiàn)間歇性丟包,無法連接實例。通過tracert、mtr等工具排查,外部網(wǎng)絡(luò)未見異常。同時,在系統(tǒng)日志中重復(fù)出現(xiàn)大量類似以下錯誤信息。
Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet. Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet. Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet. Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.
原因分析
ip_conntrack是Linux系統(tǒng)內(nèi)NAT的一個跟蹤連接條目的模塊。ip_conntrack模塊會使用一個哈希表記錄TCP協(xié)議“established connection”記錄,當(dāng)這個哈希表滿之后,便會導(dǎo)致“nf_conntrack: table full, dropping packet”錯誤。Linux系統(tǒng)會開辟一個空間,用于維護每一個TCP鏈接,這個空間的大小與nf_conntrack_buckets、nf_conntrack_max參數(shù)相關(guān),后者的默認值是前者的4倍,所以一般建議調(diào)大nf_conntrack_max參數(shù)值。
說明:系統(tǒng)維護連接比較消耗內(nèi)存,請在系統(tǒng)空閑和內(nèi)存充足的情況下調(diào)大nf_conntrack_max參數(shù),且根據(jù)系統(tǒng)的情況而定。
解決方法
- 登錄Linux實例。
-
執(zhí)行以下命令,編輯系統(tǒng)內(nèi)核配置。
vi /etc/sysctl.conf
- 修改哈希表項最大值參數(shù)net.netfilter.nf_conntrack_max為655350。
- 修改超時參數(shù)net.netfilter.nf_conntrack_tcp_timeout_established為1200,默認情況下超時時間是432000秒。
-
執(zhí)行sysctl -p命令,使配置生效。
