【問題描述】
伺服器負載正常,但伺服器記憶體飆公升影響了中介軟體的使用,檢視/var/log/messages 日誌存在大量
kernel: nf_conntrack: table full, dropping packet
【說明】
nf_conntrack 模組在 kernel 2.6.15(2006-01-03 發布) 被引入,工作在 3 層,支援 ipv4 和 ipv6,取代只支援 ipv4 的 ip_connktrack,用於跟蹤連線的狀態,供其他模組使用,它會使用乙個雜湊表來記錄 established 的記錄。需要 nat 的服務都會用到它,例如防火牆、docker 等。
開啟nf_conntrack模組會導致不需要的cpu消耗,甚至可能導致table記錄滿產生丟包問題,因此可以考慮關閉nf_conntrack模組提公升效能。
【解決方法】
1、不使用 nf_conntrack 模組【我用的這種方法,簡單粗暴】
#直接關閉iptables、ip6tables、firewalld等相關服務,並關閉開機自啟動
sed -i 's/selinux=enforcing/selinux=disabled/' /etc/selinux/config #關閉selinux
setenforce 0
systemctl stop firewalld # centos 7
service iptables stop # centos 6/7
service ip6tables stop # centos 6/7
chkconfig --level 345 ip6tables off
chkconfig --level 345 iptables off
chkconfig | grep tables # 確定全部關閉
#檢視nf_conntrack模組使用情況
lsmod |grep nf_conntrack
#移除nf_conntrack模組
sudo rmmod iptable_nat
sudo rmmod ip6table_nat
sudo rmmod nf_defrag_ipv4
sudo rmmod nf_defrag_ipv6
sudo rmmod nf_nat
sudo rmmod nf_nat_ipv4
sudo rmmod nf_nat_ipv6
sudo rmmod nf_conntrack
sudo rmmod nf_conntrack_ipv4
sudo rmmod nf_conntrack_ipv6
sudo rmmod xt_conntrack
# 需要開啟模組就使用sudo modprobe
rmmod命令說明
rmmod [-as] module_name
-a 刪除所有目前不需要的模組。
-s 把資訊輸出至syslog常駐服務,而非終端機介面。
modprobe命令說明
modprobe [-lcfr] module_name
-c :列出目前系統所有的模組
-l :列出目前在/lib/modules/`uname -r`/kernel當中的所有模組完整檔名
-f:強制載入該模組
-r:類似rmmod 就是刪除某個模組
#未使用(used by欄為0)的模組才能禁用
#如果used by不為0,先禁用後面列出的模組
#如果後面沒模組名,就是被程序使用。
#沒有簡單的方法能查到呼叫這些模組的都是什麼程序,基本靠猜
2、使用防火牆要移除state模組,因為使用該模組需要載入 nf_conntrack。確保 iptables 規則中沒有出現類似 state 模組的規則,如果有的話將其移除:
-a input -m state –state related,established -j accept
注釋 /etc/sysconfig/iptables-config 中的:
iptables_modules="ip_conntrack_netbios_ns"
移除 nf_conntrack 模組:
$ sudo modprobe -r xt_notrack nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state
$ sudo modprobe -r nf_conntrack
$ # 現在 /proc/net/ 下面應該沒有 nf_conntrack 了
3、使用 raw 表,不跟蹤連線
iptables 中的 raw 表跟包的跟蹤有關,基本就是用來幹一件事,通過 notrack 給不需要被連線跟蹤的包打標記,也就是說,如果乙個連線遇到了 -j notrack,conntrack 就不會跟蹤該連線,raw 的優先順序大於 mangle, nat, filter,包含 prerouting 和 output 鏈。
當執行 -t raw 時,系統會自動載入 iptable_raw 模組(需要該模組存在)。raw 在 2.4 以及 2.6 早期的核心中不存在,除非打了 patch,目前的系統應該都有支援:
$ sudo iptables -a forward -m state --state untracked -j accept
$ sudo iptables -t raw -a prerouting -p tcp -m multiport --dport 80,8080 -j notrack
$ sudo iptables -t raw -a prerouting -p tcp -m multiport --sport 80,8080 -j notrack
linux關閉服務
輸入ntsysv 命令把不需要的服務前面的 去掉,然後重啟 linux 伺服器。具體哪些服務是必須啟動的 服務建議表 服務名稱 功能簡介 建議 crond 系統的定時任務,一般的 linux 伺服器都需要定時任務來協助系統維護。建議開啟 開啟 httpd apache 服務的守護程序。如果需要啟動 ...
關閉LINUX報警聲
vmware上裝的linux,在shell下由於輸錯命令或是種種原因,會發出 嘟嘟 的報警聲,並不是音效卡發出的,而是主機板的報警,所以不能通過關閉音箱來解決。寢室裡經常響起這樣的聲音非常刺耳,今天在網上找到了解決方法,記下 將 etc inputrc中的set bell style none 前的...
linux關閉sendmail服務
方法一 a.root sample etc rc.d init.d sendmail stop 關閉sendmail服務 或者 root sample service sendmail stop 關閉sendmail服務 shutting down sendmail ok shutting down...