技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

iptables的conntrack表滿了導(dǎo)致訪問網(wǎng)站很慢

來源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2019-02-27 18:06┆點(diǎn)擊:

  現(xiàn)象:突然發(fā)現(xiàn)訪問網(wǎng)站很慢,服務(wù)器的cpu、內(nèi)存和磁盤使用率都正常

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

  解決方案:Iptables啟動(dòng)的是會(huì)在日志里提示當(dāng)前的buckets和conntrack_max的值以及每條跟蹤連接需要消耗多少內(nèi)存:

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

  永久修改ip_conntrack_max和hashsize

  1) 增大 ip_conntrack_max(設(shè)置為 2^20,默認(rèn)值是 2^16=65536)

  # vi /etc/sysctl.conf

  net.ipv4.ip_conntrack_max = 1048576

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

  # vi /etc/modprobe.conf

  options ip_conntrack hashsize=131072

  然后重啟 iptables 服務(wù),在 messages中可以看到參數(shù)已生效:

  # service iptables restart