一、內(nèi)核參數(shù)的查看和修改
- 查看內(nèi)核參數(shù)
sysctl -a
- 臨時(shí)修改內(nèi)核參數(shù)
?Linux系統(tǒng)啟動(dòng)后袭蝗,所有的內(nèi)核參數(shù)都保存在/proc/sys
目錄下, 只需要把要修改的數(shù)值寫入對(duì)應(yīng)的文件中就行了档痪。
- 永久修改內(nèi)核參數(shù)
?直接修改/etc/sysctl.conf
修改完成后sysctl -p
或者重啟服務(wù)器使配置生效
二、常見問題
- Time wait bucket table overflow 報(bào)錯(cuò)
?服務(wù)器/var/log/message
日志如下探越,執(zhí)行命令ss -anp -o state time-wait|wc -l
統(tǒng)計(jì)處于 TIME_WAIT 狀態(tài)的 TCP 連接數(shù)狡赐,發(fā)現(xiàn)處于 TIME_WAIT 狀態(tài)的 TCP 連接非常多。
Feb 19 13:44:20 i-*** kernel: TCP: time wait bucket table overflow
Feb 19 13:44:24 i-*** kernel: printk: 432 messages suppressed.
Feb 19 13:44:34 i-*** kernel: TCP: time wait bucket table overflow
Feb 19 13:44:42 i-*** kernel: printk: 132 messages suppressed.
?參數(shù) net.ipv4.tcp_max_tw_buckets
可以調(diào)整內(nèi)核管理中 TIME_WAIT 連接的數(shù)量钦幔,當(dāng)服務(wù)器中處于 TIME_WAIT 連接的數(shù)量和需要轉(zhuǎn)換為 TIME_WAIT 狀態(tài)的連接數(shù)之和超過 net.ipv4.tcp_max_tw_buckets
的參數(shù)值時(shí)枕屉,服務(wù)器的日志中會(huì)出現(xiàn)以上錯(cuò)誤
?解決方法:調(diào)高改參數(shù)的值,或者在業(yè)務(wù)層面去改進(jìn)TCP連接
- 服務(wù)器中 FIN_WAIT2 狀態(tài)的 TCP 鏈接過多
?原因分析:HTTP服務(wù)中鲤氢,Server由于某種原因會(huì)主動(dòng)關(guān)閉連接搀庶,列如keepalive超時(shí)的情況下。作為主動(dòng)關(guān)閉連接的Server就會(huì)進(jìn)入FIN_WAIT2狀態(tài)铜异;TCP/IP協(xié)議棧中存在連接半連接的概念哥倔,F(xiàn)IN_WAIT2狀態(tài)不算超時(shí),如果client不關(guān)閉揍庄,F(xiàn)IN_WAIT2將b保持到系統(tǒng)重啟咆蒿,越來越多的FIN_WAIT2會(huì)是內(nèi)核出問題
?解決方法:修改/etc/sysctl.conf
文件,加入以下內(nèi)容
net.ipv4.tcp_syncookies = 1 # 該參數(shù)表示是否打開 TCP 同步標(biāo)簽(SYN_COOKIES)蚂子,內(nèi)核必須開啟并編譯 CONFIG_SYN_COOKIES沃测,SYN_COOKIES 可以防止一個(gè)套接字在有過多試圖連接到達(dá)時(shí)引起過載。
#默認(rèn)值 0 表示關(guān)閉食茎,當(dāng)該參數(shù)被設(shè)置為 1 且 SYN_RECV 隊(duì)列滿了之后蒂破,內(nèi)核會(huì)對(duì) SYN 包的回復(fù)做一定的修改。啟用 net.ipv4.tcp_syncookies 后别渔,會(huì)忽略 net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 8192 # 該參數(shù)決定了系統(tǒng)中處于 SYN_RECV 狀態(tài)的 TCP 連接數(shù)量附迷。SYN_RECV 狀態(tài)指的是當(dāng)系統(tǒng)收到 SYN 后,作了 SYN+ACK 響應(yīng)后等待對(duì)方回復(fù)三次握手階段中的最后一個(gè) ACK 的階段
net.ipv4.tcp_max_tw_buckets = 5000
- 服務(wù)器中出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的 TCP 連接
?原因分析:關(guān)閉TCP連接時(shí)哎媚,TCP連接的兩端都可以發(fā)起關(guān)閉連接的請(qǐng)求喇伯,若對(duì)端發(fā)起了關(guān)閉連接,但本地沒有關(guān)閉連接拨与,那么連接就會(huì)處于CLOSE_WAIT狀態(tài)稻据。雖然該連接已經(jīng)處于半開狀態(tài),但是已經(jīng)無法和對(duì)端通信买喧,需要及時(shí)釋放掉該鏈接捻悯,可以從業(yè)務(wù)層判斷某個(gè)連接是否已經(jīng)被對(duì)端關(guān)閉。 - 其它常用內(nèi)核參數(shù)
net.core.somaxconn:這個(gè)參數(shù)用于調(diào)節(jié)系統(tǒng)同時(shí)發(fā)起的TCP連接數(shù)淤毛,在高并發(fā)的請(qǐng)求中今缚,默認(rèn)的值可能會(huì)導(dǎo)致鏈接超時(shí)或重傳。該參數(shù)指的是處于 ESTABLISHED 的數(shù)量上限钱床。若服務(wù)器業(yè)務(wù)負(fù)載很高荚斯,則有必要調(diào)高該參數(shù)
net.ipv4.tcp_max_syn_backlog:指的是還在三次握手的半連接的上限
net.ipv4.tcp_fin_timeout:定義連接保持在FINFIN-WAIT-2狀態(tài)的時(shí)間埠居,默認(rèn)60S
net.ipv4.tcp_tw_reuse:允許將TIME-WAIT 連接重新用于新的TCP連接查牌,默認(rèn)為0事期,1表示開啟
net.ipv4.tcp_rw_recycle:為1時(shí)表示開啟TCP連接中TIME-WAIT連接的快速回收
net.ipv4.tcp_syncookies:?jiǎn)⒂?SYN Cookies功能,當(dāng)出現(xiàn)SYN隊(duì)列溢出時(shí)纸颜,啟用Cookie來處理兽泣,可以防范少量SYN攻擊,默認(rèn)開啟
net.ipv4.tcp_keepalive_time:當(dāng)keepalive開啟時(shí)胁孙,TCP發(fā)送keepalive消息的頻率唠倦,默認(rèn)7200S,建議設(shè)置為600S
net.ipv4.ip_locall_port:允許系統(tǒng)打開的端口范圍涮较,即用于向外連接的端口范圍
# 禁用整個(gè)系統(tǒng)所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用某一個(gè)指定接口的IPv6(例如:eth0, lo)
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
三稠鼻、禁用 CentOS 7 系統(tǒng)的 IPV6 接口
- 修改 /etc/default/grub 文件,把第六行修改為以下內(nèi)容
GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
- 重新生成 grub.cfg 文件
grub2-mkconfig -o /boot/grub2/grub.cfg
-
重啟系統(tǒng)查看 IPV6 接口是否被禁用