Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

iptables conntrack 表滿導致訪問緩慢:原理分析與參數調優

編輯:關於伺服器

故障現象

伺服器 CPU、記憶體、磁碟 IO 均正常,但網站訪問極慢或連線逾時。/var/log/messages 反覆出現:

kernel: ip_conntrack table full dropping packet

原理分析

ip_conntrack 模組在記憶體中維護連線追蹤表,每條連線佔用一個條目。正常情況下,連線關閉時雙方交換 FIN/RST 封包,條目即被釋放。但遭遇 SYN Flood 攻擊、路由環路、網卡故障 導致 RST 封包丟失,條目無法老化釋放,逐漸填滿表空間,新連線被丟包。

參數調優方案

1. 檢視當前值

cat /proc/sys/net/ipv4/ip_conntrack_max
cat /proc/sys/net/ipv4/ip_conntrack_count

2. 永久調大上限與哈希桶

編輯 /etc/sysctl.conf:

# 連線追蹤表最大條目數 (預設 65536,建議 2^20 = 1048576)
net.ipv4.ip_conntrack_max = 1048576

# 哈希桶大小 = ip_conntrack_max / 8 (i386 架構)
net.ipv4.ip_conntrack_buckets = 131072

套用:sysctl -p

3. 模組參數調整 (需重載模組)

編輯 /etc/modprobe.conf (或 /etc/modprobe.d/ip_conntrack.conf):

options ip_conntrack hashsize=131072

重啟 iptables 使模組重載:

service iptables restart

驗證 dmesg | grep conntrack 確認新參數生效。

記憶體估算

每條目約 300-400 Bytes。1048576 條目約需 300-400 MB 記憶體,請依實體 RAM 調整,避免 OOM。

應急清理

# 立即清空表 (會斷開所有現有連線,極度謹慎)
echo 1 > /proc/sys/net/ipv4/ip_conntrack_flush
Copyright © Windows教程網 All Rights Reserved