Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 服務器技術 >> 關於服務器 >> iptables的conntrack表滿了導致訪問網站很慢

iptables的conntrack表滿了導致訪問網站很慢

日期:2017/2/8 10:11:18      編輯:關於服務器

現象:突然發現訪問網站很慢,服務器的cpu、內存和磁盤使用率都正常

分析過程及解決方案:查詢/var/log/message日志發現有這樣的記錄“ip_conntrack table full dropping packet”。kernel 用 ip_conntrack 模塊來記錄 iptables 網絡包的狀態,並保存到 table 裡(這個 table 在內存裡),如果網絡狀況繁忙,比如高連接,高並發連接等會導致逐步占用這個 table 可用空間,一般這個 table 很大不容易占滿並且可以自己清理,table 的記錄會一直呆在 table 裡占用空間直到源 IP 發一個 RST 包,但是如果出現被攻擊、錯誤的網絡配置、有問題的路由/路由器、有問題的網卡等情況的時候,就會導致源 IP 發的這個 RST 包收不到,這樣就積累在 table 裡,越積累越多直到占滿,滿了以後 iptables 就會丟包,出現外部無法連接服務器的情況。

解決方案:Iptables啟動的是會在日志裡提示當前的buckets和conntrack_max的值以及每條跟蹤連接需要消耗多少內存:

 

也就是說304MB內存將支持1048576條跟蹤連接記錄,所以需要按照服務器的內存大小來配置合適的值。

永久修改ip_conntrack_max和hashsize

增大 ip_conntrack_max(設置為 2^20,默認值是 2^16=65536)

vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 1048576

2) 增大 hashsize (在i386架構上,HASHSIZE = CONNTRACK_MAX / 8)

vi /etc/modprobe.conf

options ip_conntrack hashsize=131072

然後重啟 iptables 服務,在 messages中可以看到參數已生效:

service iptables restart

 

Copyright © Windows教程網 All Rights Reserved