概述
本文主要介紹常見的Linux內(nèi)核參數(shù)及相關(guān)問題的處理蝉揍。
詳細信息
本文主要介紹如下幾點內(nèi)容,您可以根據(jù)實際需要選擇劲阎。
- 查看和修改Linux實例內(nèi)核參數(shù)
- Linux網(wǎng)絡(luò)相關(guān)內(nèi)核參數(shù)引發(fā)的常見問題及處理
- 文檔涉及的Linux內(nèi)核參數(shù)說明
查看和修改Linux實例內(nèi)核參數(shù)
在修改內(nèi)核參數(shù)前忠售,需要注意以下幾點。
- 從實際需求出發(fā)记盒,盡量有相關(guān)數(shù)據(jù)的支撐,不建議隨意調(diào)整內(nèi)核參數(shù)外傅。
- 了解參數(shù)的具體作用纪吮,需注意同類型或版本的環(huán)境中,內(nèi)核參數(shù)可能有所不同萎胰。
- 備份ECS實例中的重要數(shù)據(jù)碾盟。關(guān)于如何備份數(shù)據(jù)請參見創(chuàng)建快照。
本文提供以下兩種修改Linux實例內(nèi)核參數(shù)的方法技竟。
方法一:通過/proc/sys/目錄查看和修改內(nèi)核參數(shù)
/proc/sys/
目錄是Linux內(nèi)核在啟動后生成的偽目錄冰肴,其目錄下的net
文件夾中存放了當前系統(tǒng)中開啟的所有內(nèi)核參數(shù),目錄樹結(jié)構(gòu)與參數(shù)的完整名稱相關(guān),如net.ipv4.tcp_tw_recycle
嚼沿,它對應(yīng)的文件是/proc/sys/net/ipv4/tcp_tw_recycle
文件估盘,文件的內(nèi)容就是參數(shù)值瓷患。方法一修改的參數(shù)值僅在當前運行中生效骡尽,系統(tǒng)重啟后會回滾到歷史值,一般用于臨時性驗證修改的效果擅编。若需要永久性修改攀细,請參考方法二。
- 查看內(nèi)核參數(shù):使用
cat
命令查看對應(yīng)文件的內(nèi)容爱态,執(zhí)行如下命令谭贪,查看net.ipv4.tcp_tw_recycle
的值。
cat /proc/sys/net/ipv4/tcp_tw_recycle
- 修改內(nèi)核參數(shù):使用
echo
命令修改內(nèi)核參數(shù)對應(yīng)的文件锦担,執(zhí)行如下命令俭识,將net.ipv4.tcp_tw_recycle
的值修改為0。
echo "0" > /proc/sys/net/ipv4/tcp_tw_recycle
方法二:通過sysctl.conf文件查看和修改內(nèi)核參數(shù)
- 查看內(nèi)核參數(shù):執(zhí)行
sysctl -a
命令洞渔,查看當前系統(tǒng)中生效的所有參數(shù)套媚,系統(tǒng)顯示類似如下。
net.ipv4.tcp_app_win = 31
net.ipv4.tcp_adv_win_scale = 2
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_frto = 2
net.ipv4.tcp_frto_response = 0
net.ipv4.tcp_low_latency = 0
net.ipv4.tcp_no_metrics_save = 0
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_tso_win_divisor = 3
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_abc = 0
net.ipv4.tcp_mtu_probing = 0
net.ipv4.tcp_base_mss = 512
net.ipv4.tcp_workaround_signed_windows = 0
net.ipv4.tcp_challenge_ack_limit = 1000
net.ipv4.tcp_limit_output_bytes = 262144
net.ipv4.tcp_dma_copybreak = 4096
net.ipv4.tcp_slow_start_after_idle = 1
net.ipv4.cipso_cache_enable = 1
net.ipv4.cipso_cache_bucket_size = 10
net.ipv4.cipso_rbm_optfmt = 0
net.ipv4.cipso_rbm_strictvalid = 1
-
通過以下兩種方式磁椒,修改內(nèi)核參數(shù)堤瘤。
注:調(diào)整內(nèi)核參數(shù)后,內(nèi)核處于不穩(wěn)定狀態(tài)浆熔,請務(wù)必重啟實例本辐。
-
執(zhí)行如下命令,臨時修改內(nèi)核參數(shù)医增。
/sbin/sysctl -w kernel.parameter="[$Example]"
注:[$Example]為參數(shù)值慎皱,如
sysctl -w net.ipv4.tcp_tw_recycle="0"
命令,將參數(shù)值改為0叶骨。 -
通過修改配置文件的方式修改內(nèi)核參數(shù)茫多。
- 執(zhí)行如下命令,修改
/etc/sysctl.conf
文件中的參數(shù)邓萨。
vi /etc/sysctl.conf
- 執(zhí)行如下命令地梨,使配置生效。
/sbin/sysctl -p
- 執(zhí)行如下命令,修改
Linux網(wǎng)絡(luò)相關(guān)內(nèi)核參數(shù)引發(fā)的常見問題及處理
Linux網(wǎng)絡(luò)相關(guān)內(nèi)核參數(shù)引發(fā)的常見問題主要包括以下幾種缔恳。
| 問題一:Linux實例NAT哈希表滿導(dǎo)致ECS實例丟包 | 問題二:報“Time wait bucket table overflow”錯誤 |
| 問題三:Linux實例中FIN_WAIT2狀態(tài)的TCP鏈接過多 | 問題四:Linux實例中出現(xiàn)大量CLOSE_WAIT狀態(tài)的TCP連接 |
| 問題五:客戶端配置NAT后仍無法訪問ECS或RDS遠端服務(wù)器 | 問題六:存在大量處于TIME_WAIT狀態(tài)的連接 |
| 問題七:服務(wù)端斷開連接后客戶端仍然可以看到是建立連接的 | 問題八:無法在本地網(wǎng)絡(luò)環(huán)境通過SSH連接Linux實例 |
問題一:Linux實例NAT哈希表滿導(dǎo)致ECS實例丟包
提示:此處涉及的內(nèi)核參數(shù)如下宝剖。
net.netfilter.nf_conntrack_buckets
net.nf_conntrack_max
問題現(xiàn)象
Linux實例出現(xiàn)間歇性丟包,無法連接實例歉甚。請參考ping 丟包或不通時鏈路測試說明万细,通過tracert、mtr等工具排查,外部網(wǎng)絡(luò)未見異常赖钞。同時腰素,在系統(tǒng)日志中重復(fù)出現(xiàn)大量類似如下錯誤信息。
Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.
Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.
Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.
Feb 6 16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.
原因分析
ip_conntrack是Linux系統(tǒng)內(nèi)NAT的一個跟蹤連接條目的模塊雪营。ip_conntrack模塊會使用一個哈希表記錄TCP協(xié)議“established connection”記錄弓千,當這個哈希表滿之后,便會導(dǎo)致“nf_conntrack: table full, dropping packet
”錯誤献起。Linux系統(tǒng)會開辟一個空間洋访,用于維護每一個TCP鏈接,這個空間的大小與nf_conntrack_buckets
谴餐、nf_conntrack_maxca
參數(shù)相關(guān)姻政,后者的默認值是前者的4倍,所以一般建議調(diào)大nf_conntrack_maxca參數(shù)值岂嗓。
注:系統(tǒng)維護連接比較消耗內(nèi)存汁展,請在系統(tǒng)空閑和內(nèi)存充足的情況下調(diào)大
nf_conntrack_maxca
參數(shù),且根據(jù)系統(tǒng)的情況而定厌殉。
解決方法
- 登錄Linux實例食绿,如何登錄Linux實例請參見使用管理終端連接Linux實例。
- 執(zhí)行如下命令年枕,編輯系統(tǒng)內(nèi)核配置炫欺。
vi /etc/sysctl.conf
- 修改哈希表項最大值參數(shù)
net.netfilter.nf_conntrack_max
為655350
。 - 修改超時參數(shù)
net.netfilter.nf_conntrack_tcp_timeout_established
為1200
熏兄,默認情況下超時時間是432000秒品洛。 - 執(zhí)行
sysctl -p
命令,使配置生效摩桶。
問題二:報“Time wait bucket table overflow”錯誤
提示:此處涉及的內(nèi)核參數(shù)為
net.ipv4.tcp_max_tw_buckets
桥状。
問題現(xiàn)象
- Linux實例的
/var/log/message
日志信息全是類似“kernel: TCP: time wait bucket table overflow
”的報錯信息,提示“time wait bucket table
”溢出硝清,系統(tǒng)顯示類似如下辅斟。
Feb 18 12:28:38 i-*** kernel: TCP: time wait bucket table overflow
Feb 18 12:28:44 i-*** kernel: printk: 227 messages suppressed.
Feb 18 12:28:44 i-*** kernel: TCP: time wait bucket table overflow
Feb 18 12:28:52 i-*** kernel: printk: 121 messages suppressed.
Feb 18 12:28:52 i-*** kernel: TCP: time wait bucket table overflow
Feb 18 12:28:53 i-*** kernel: printk: 351 messages suppressed.
Feb 18 12:28:53 i-*** kernel: TCP: time wait bucket table overflow
Feb 18 12:28:59 i-*** kernel: printk: 319 messages suppressed.
- 執(zhí)行如下命令谅年,統(tǒng)計處于TIME_WAIT狀態(tài)的TCP連接數(shù)嫌变,發(fā)現(xiàn)處于TIME_WAIT狀態(tài)的TCP連接非常多尖淘。
netstat -ant|grep TIME_WAIT|wc -l
原因分析
參數(shù)net.ipv4.tcp_max_tw_buckets
可以調(diào)整內(nèi)核中管理TIME_WAIT狀態(tài)的數(shù)量愕提。當實例中處于TIME_WAIT狀態(tài),及需要轉(zhuǎn)換為TIME_WAIT狀態(tài)的連接數(shù)之和超過net.ipv4.tcp_max_tw_buckets
參數(shù)值時逐哈,message日志中將報“time wait bucket table
” 錯誤促绵,同時內(nèi)核關(guān)閉超出參數(shù)值的部分TCP連接缓艳。您需要根據(jù)實際情況適當調(diào)高net.ipv4.tcp_max_tw_buckets
參數(shù)缓苛,同時從業(yè)務(wù)層面去改進TCP連接芳撒。
解決方法
- 執(zhí)行如下命令,統(tǒng)計TCP連接數(shù)。
netstat -anp |grep tcp |wc -l
- 執(zhí)行如下命令笔刹,查詢
net.ipv4.tcp_max_tw_buckets
參數(shù)芥备。如果確認連接使用很高,則容易超出限制舌菜。
vi /etc/sysctl.conf
根據(jù)現(xiàn)場情況萌壳,增加
net.ipv4.tcp_max_tw_buckets
參數(shù)值的大小。執(zhí)行
sysctl -p
命令酷师,使配置生效讶凉。
問題三:Linux實例中FIN_WAIT2狀態(tài)的TCP鏈接過多
提示:此處涉及的內(nèi)核參數(shù)為
net.ipv4.tcp_fin_timeout
。
問題現(xiàn)象
FIN_WAIT2狀態(tài)的TCP鏈接過多山孔。
原因分析
- 在HTTP服務(wù)中,Server由于某種原因會主動關(guān)閉連接荷憋,例如KEEPALIVE超時的情況下台颠。作為主動關(guān)閉連接的Server就會進入FIN_WAIT2狀態(tài)。
- 在TCP/IP協(xié)議棧中勒庄,存在半連接的概念串前,F(xiàn)IN_WAIT2狀態(tài)不算超時,如果Client不關(guān)閉实蔽,F(xiàn)IN_WAIT2狀態(tài)將保持到系統(tǒng)重啟荡碾,越來越多的FIN_WAIT2狀態(tài)會致使內(nèi)核Crash。
- 建議調(diào)小
net.ipv4.tcp_fin_timeout
參數(shù)的值局装,以便加快系統(tǒng)關(guān)閉處于FIN_WAIT2
狀態(tài)的TCP連接坛吁。
解決方法
- 執(zhí)行
vi /etc/sysctl.conf
命令,修改或增加以下內(nèi)容铐尚。
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
-
執(zhí)行
sysctl -p
命令拨脉,使配置生效。注:由于
FIN_WAIT2
狀態(tài)的TCP連接會進入TIME_WAIT
狀態(tài)宣增,請同時參考問題二:報“Time wait bucket table overflow”錯誤玫膀。
問題四:Linux實例中出現(xiàn)大量CLOSE_WAIT狀態(tài)的TCP連接
問題現(xiàn)象
執(zhí)行如下命令,發(fā)現(xiàn)當前系統(tǒng)中處于CLOSE_WAIT
狀態(tài)的TCP連接非常多爹脾。
netstat -atn|grep CLOSE_WAIT|wc -l
原因分析
根據(jù)實例上的業(yè)務(wù)量判斷CLOSE_WAIT數(shù)量是否超出了正常的范圍帖旨。TCP連接斷開時需要進行四次揮手,TCP連接的兩端都可以發(fā)起關(guān)閉連接的請求灵妨,若對端發(fā)起了關(guān)閉連接解阅,但本地沒有關(guān)閉連接,那么該連接就會處于CLOSE_WAIT狀態(tài)闷串。雖然該連接已經(jīng)處于半開狀態(tài)瓮钥,但是已經(jīng)無法和對端通信,需要及時的釋放該連接。建議從業(yè)務(wù)層面及時判斷某個連接是否已經(jīng)被對端關(guān)閉碉熄,即在程序邏輯中對連接及時關(guān)閉桨武,并進行檢查。
解決方法
編程語言中對應(yīng)的讀锈津、寫函數(shù)一般包含了檢測CLOSE_WAIT狀態(tài)的TCP連接功能呀酸,可通過執(zhí)行如下命令,查看當前實例上處于CLOSE_WAIT狀態(tài)的連接數(shù)琼梆。Java語言和C語言中關(guān)閉連接的方法如下性誉。
netstat -an|grep CLOSE_WAIT|wc -l
Java語言
- 通過
read
方法來判斷I/O 。當read方法返回-1
時茎杂,則表示已經(jīng)到達末尾错览。 - 通過
close
方法關(guān)閉該鏈接。
C語言
檢查read
的返回值煌往。
- 若等于0倾哺,則可以關(guān)閉該連接。
- 若小于0刽脖,則查看error羞海,若不是AGAIN,則同樣可以關(guān)閉連接曲管。
問題五:客戶端配置NAT后仍無法訪問ECS或RDS遠端服務(wù)器
提示:此處涉及的內(nèi)核參數(shù)如下却邓。
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_timestamps
問題現(xiàn)象
客戶端配置NAT后無法訪問遠端ECS、RDS院水,包括配置了SNAT的VPC中的ECS實例腊徙。同時無法訪問其他ECS或RDS等云產(chǎn)品,抓包檢測發(fā)現(xiàn)遠端ECS和RDS對客戶端發(fā)送的SYN包沒有響應(yīng)衙耕。
原因分析
若遠端服務(wù)器的內(nèi)核參數(shù)net.ipv4.tcp_tw_recycle
和net.ipv4.tcp_timestamps
的值都為1昧穿,則遠端服務(wù)器會檢查每一個報文中的時間戳(Timestamp),若Timestamp不是遞增的關(guān)系橙喘,不會響應(yīng)這個報文时鸵。配置NAT后,遠端服務(wù)器看到來自不同客戶端的源IP相同厅瞎,但NAT前每一臺客戶端的時間可能會有偏差饰潜,報文中的Timestamp就不是遞增的情況。
解決方法
- 遠端服務(wù)器為ECS時和簸,修改
net.ipv4.tcp_tw_recycle
參數(shù)為0彭雾。 - 遠端服務(wù)器為RDS等PaaS服務(wù)時。RDS無法直接修改內(nèi)核參數(shù)锁保,需要在客戶端上修改
net.ipv4.tcp_tw_recycle
參數(shù)和net.ipv4.tcp_timestamps
參數(shù)為0薯酝。
問題六:存在大量處于TIME_WAIT狀態(tài)的連接
提示:此處涉及的內(nèi)核參數(shù)如下半沽。
- net.ipv4.tcp_syncookies
- net.ipv4.tcp_tw_reuse
- net.ipv4.tcp_tw_recycle
- net.ipv4.tcp_fin_timeout
問題現(xiàn)象
云服務(wù)器中存在大量處于TIME_WAIT狀態(tài)的連接。
原因分析
首先通過調(diào)用close()發(fā)起主動關(guān)閉吴菠,在發(fā)送最后一個ACK之后會進入time_wait的狀態(tài)者填,該發(fā)送方會保持2MSL時間之后才會回到初始狀態(tài)。MSL值是數(shù)據(jù)包在網(wǎng)絡(luò)中的最大生存時間做葵。產(chǎn)生這種結(jié)果使得這個TCP連接在2MSL連接等待期間占哟,定義這個連接的四元組(客戶端IP地址和端口,服務(wù)端IP地址和端口號)不能被使用酿矢。
解決方法
通過netstat或ss命令榨乎,可以看到大量處于TIME_WAIT狀態(tài)的連接。
- 執(zhí)行如下命令瘫筐,查看TIME_WAIT狀態(tài)的連接數(shù)量蜜暑。
netstat -n | awk ‘/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}’
- 執(zhí)行如下命令,編輯系統(tǒng)內(nèi)核配置严肪。
vi /etc/sysctl.conf
修改或加入以下內(nèi)容史煎。
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
- 執(zhí)行命令如下命令,使配置生效驳糯。
/sbin/sysctl -p
問題七:服務(wù)端斷開連接后客戶端仍然可以看到是建立連接的
提示:此處涉及的內(nèi)核參數(shù)為
net.ipv4.tcp_fin_timeout
。
問題現(xiàn)象
服務(wù)端A與客戶端B建立了TCP連接氢橙,之后服務(wù)端A主動斷開了連接酝枢,但是在客戶端B上仍然看到連接是建立的。
原因分析
通常是由于修改了服務(wù)端默認的net.ipv4.tcp_fin_timeout
內(nèi)核參數(shù)所致悍手。
解決方法
- 執(zhí)行如下命令帘睦,修改配置,設(shè)置
net.ipv4.tcp_fin_timeout=30
坦康。
vi /etc/sysctl.conf
- 執(zhí)行如下命令竣付,使配置生效。
sysctl -p
問題八:無法在本地網(wǎng)絡(luò)環(huán)境通過SSH連接Linux實例
提示:此處涉及的內(nèi)核參數(shù)如下滞欠。
- net.ipv4.tcp_tw_recycle
- net.ipv4.tcp_timestamps
問題現(xiàn)象
無法在本地網(wǎng)絡(luò)環(huán)境通過SSH連接Linux實例古胆,或者訪問該Linux實例上的HTTP業(yè)務(wù)出現(xiàn)異常。Telnet測試會被reset筛璧。
原因分析
如果您的本地網(wǎng)絡(luò)是NAT共享方式上網(wǎng)逸绎,該問題可能是由于本地NAT環(huán)境和目標Linux相關(guān)內(nèi)核參數(shù)配置不匹配導(dǎo)致。嘗試通過修改目標Linux實例內(nèi)核參數(shù)來解決問題夭谤。
- 遠程連接目標Linux實例棺牧。
- 執(zhí)行如下命令,查看當前配置朗儒。
cat /proc/sys/net/ipv4/tcp_tw_recycle
cat /proc/sys/net/ipv4/tcp_timestamps
- 查看上述兩個配置的值是否為 0颊乘,如果為 1参淹,NAT環(huán)境下的請求可能會導(dǎo)致上述問題。
解決方法
通過如下方式將上述參數(shù)值修改為0乏悄。
- 執(zhí)行如下命令浙值,修改配置文件。
vi /etc/sysctl.conf
- 添加如下內(nèi)容纲爸。
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_timestamps=0
- 執(zhí)行如下命令亥鸠,使配置生效。
sysctl -p
- 重新SSH登錄實例识啦,或者進行業(yè)務(wù)訪問測試负蚊。
文檔涉及的Linux內(nèi)核參數(shù)說明
文檔涉及的Linux內(nèi)核參數(shù)說明如下,可參考如下參數(shù)說明進行相關(guān)操作颓哮。
參數(shù) | 描述 |
---|---|
net.core.rmem_default | 默認的TCP數(shù)據(jù)接收窗口大屑易薄(字節(jié))。 |
net.core.rmem_max | 最大的TCP數(shù)據(jù)接收窗口(字節(jié))冕茅。 |
net.core.wmem_default | 默認的TCP數(shù)據(jù)發(fā)送窗口大猩思(字節(jié))。 |
net.core.wmem_max | 最大的TCP數(shù)據(jù)發(fā)送窗口(字節(jié))姨伤。 |
net.core.netdev_max_backlog | 當內(nèi)核處理速度比網(wǎng)卡接收速度慢時哨坪,這部分多出來的包就會被保存在網(wǎng)卡的接收隊列上,而該參數(shù)說明了這個隊列的數(shù)量上限乍楚。在每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時当编,允許送到隊列的數(shù)據(jù)包的最大數(shù)目。 |
net.core.somaxconn | 該參數(shù)定義了系統(tǒng)中每一個端口最大的監(jiān)聽隊列的長度徒溪,是個全局參數(shù)忿偷。該參數(shù)和net.ipv4.tcp_max_syn_backlog 有關(guān)聯(lián),后者指的是還在三次握手的半連接的上限臊泌,該參數(shù)指的是處于ESTABLISHED的數(shù)量上限鲤桥。若您的ECS實例業(yè)務(wù)負載很高,則有必要調(diào)高該參數(shù)渠概。listen(2) 函數(shù)中的參數(shù)backlog 同樣是指明監(jiān)聽的端口處于ESTABLISHED的數(shù)量上限茶凳,當backlog 大于net.core.somaxconn 時,以net.core.somaxconn 參數(shù)為準高氮。 |
net.core.optmem_max | 表示每個套接字所允許的最大緩沖區(qū)的大小慧妄。 |
net.ipv4.tcp_mem | 確定TCP棧應(yīng)該如何反映內(nèi)存使用,每個值的單位都是內(nèi)存頁(通常是4KB)剪芍。第一個值是內(nèi)存使用的下限塞淹。第二個值是內(nèi)存壓力模式開始對緩沖區(qū)使用應(yīng)用壓力的上限。第三個值是內(nèi)存使用的上限罪裹。在這個層次上可以將報文丟棄饱普,從而減少對內(nèi)存的使用运挫。對于較大的BDP可以增大這些值(注:其單位是內(nèi)存頁而不是字節(jié))。 |
net.ipv4.tcp_rmem | 為自動調(diào)優(yōu)定義Socket使用的內(nèi)存套耕。第一個值是為Socket接收緩沖區(qū)分配的最少字節(jié)數(shù)谁帕。第二個值是默認值(該值會被rmem_default覆蓋),緩沖區(qū)在系統(tǒng)負載不重的情況下可以增長到這個值冯袍。第三個值是接收緩沖區(qū)空間的最大字節(jié)數(shù)(該值會被rmem_max覆蓋)匈挖。 |
net.ipv4.tcp_wmem | 為自動調(diào)優(yōu)定義Socket使用的內(nèi)存。第一個值是為Socket發(fā)送緩沖區(qū)分配的最少字節(jié)數(shù)康愤。第二個值是默認值(該值會被wmem_default覆蓋)儡循,緩沖區(qū)在系統(tǒng)負載不重的情況下可以增長到這個值。 |
第三個值是發(fā)送緩沖區(qū)空間的最大字節(jié)數(shù)(該值會被wmem_max覆蓋)征冷。 | |
net.ipv4.tcp_keepalive_time | TCP發(fā)送keepalive探測消息的間隔時間(秒)择膝,用于確認TCP連接是否有效。 |
net.ipv4.tcp_keepalive_intvl | 探測消息未獲得響應(yīng)時检激,重發(fā)該消息的間隔時間(秒)肴捉。 |
net.ipv4.tcp_keepalive_probes | 在認定TCP連接失效之前,最多發(fā)送多少個keepalive探測消息叔收。 |
net.ipv4.tcp_sack | 啟用有選擇的應(yīng)答(1表示啟用)齿穗,通過有選擇地應(yīng)答亂序接收到的報文來提高性能,讓發(fā)送者只發(fā)送丟失的報文段饺律,(對于廣域網(wǎng)通信來說)這個選項應(yīng)該啟用缤灵,但是會增加對CPU的占用。 |
net.ipv4.tcp_fack | 啟用轉(zhuǎn)發(fā)應(yīng)答蓝晒,可以進行有選擇應(yīng)答(SACK)從而減少擁塞情況的發(fā)生,這個選項也應(yīng)該啟用帖鸦。 |
net.ipv4.tcp_timestamps | TCP時間戳(會在TCP包頭增加12B)芝薇,以一種比重發(fā)超時更精確的方法(參考RFC 1323)來啟用對RTT的計算,為實現(xiàn)更好的性能應(yīng)該啟用這個選項作儿。 |
net.ipv4.tcp_window_scaling | 啟用RFC 1323定義的window scaling洛二,要支持超過64KB的TCP窗口,必須啟用該值(1表示啟用)攻锰,TCP窗口最大至1GB晾嘶,TCP連接雙方都啟用時才生效。 |
net.ipv4.tcp_syncookies | 該參數(shù)表示是否打開TCP同步標簽(SYN_COOKIES )娶吞,內(nèi)核必須開啟并編譯CONFIG_SYN_COOKIES垒迂,SYN_COOKIES 可以防止一個套接字在有過多試圖連接到達時,引起過載妒蛇。默認值0表示關(guān)閉机断。當該參數(shù)被設(shè)置為1楷拳,且SYN_RECV 隊列滿了之后,內(nèi)核會對SYN包的回復(fù)做一定的修改吏奸,即在響應(yīng)的SYN+ACK包中欢揖,初始的序列號是由源IP+Port、目的IP+Port及時間這五個參數(shù)共同計算出一個值組成精心組裝的TCP包奋蔚。由于ACK包中確認的序列號并不是之前計算出的值她混,惡意攻擊者無法響應(yīng)或誤判,而請求者會根據(jù)收到的SYN+ACK包做正確的響應(yīng)泊碑。啟用net.ipv4.tcp_syncookies 后坤按,會忽略net.ipv4.tcp_max_syn_backlog 。 |
net.ipv4.tcp_tw_reuse | 表示是否允許將處于TIME-WAIT狀態(tài)的Socket(TIME-WAIT的端口)用于新的TCP連接蛾狗。 |
net.ipv4.tcp_tw_recycle | 能夠更快地回收TIME-WAIT套接字晋涣。 |
net.ipv4.tcp_fin_timeout | 對于本端斷開的Socket連接,TCP保持在FIN-WAIT-2狀態(tài)的時間(秒)沉桌。對方可能會斷開連接或一直不結(jié)束連接或不可預(yù)料的進程死亡谢鹊。 |
net.ipv4.ip_local_port_range | 表示TCP/UDP協(xié)議允許使用的本地端口號。 |
net.ipv4.tcp_max_syn_backlog | 該參數(shù)決定了系統(tǒng)中處于SYN_RECV 狀態(tài)的TCP連接數(shù)量留凭。SYN_RECV 狀態(tài)指的是當系統(tǒng)收到SYN后佃扼,作為SYN+ACK響應(yīng)后等待對方回復(fù)三次握手階段中的最后一個ACK的階段。對于還未獲得對方確認的連接請求蔼夜,可保存在隊列中的最大數(shù)目兼耀。如果服務(wù)器經(jīng)常出現(xiàn)過載,可以嘗試增加這個數(shù)字求冷。默認為1024瘤运。 |
net.ipv4.tcp_low_latency | 允許TCP/IP棧適應(yīng)在高吞吐量情況下低延時的情況,這個選項應(yīng)該禁用匠题。 |
net.ipv4.tcp_westwood | 啟用發(fā)送者端的擁塞控制算法拯坟,它可以維護對吞吐量的評估,并試圖對帶寬的整體利用情況進行優(yōu)化韭山,對于WAN通信來說應(yīng)該啟用這個選項郁季。 |
net.ipv4.tcp_bic | 為快速長距離網(wǎng)絡(luò)啟用Binary Increase Congestion,這樣可以更好地利用以GB速度進行操作的鏈接钱磅,對于WAN通信應(yīng)該啟用這個選項梦裂。 |
net.ipv4.tcp_max_tw_buckets | 該參數(shù)設(shè)置系統(tǒng)的TIME_WAIT的數(shù)量,如果超過默認值則會被立即清除盖淡。默認為180000年柠。 |
net.ipv4.tcp_synack_retries | 指明了處于SYN_RECV狀態(tài)時重傳SYN+ACK包的次數(shù)。 |
net.ipv4.tcp_abort_on_overflow | 設(shè)置該參數(shù)為1時禁舷,當系統(tǒng)在短時間內(nèi)收到了大量的請求彪杉,而相關(guān)的應(yīng)用程序未能處理時毅往,就會發(fā)送Reset包直接終止這些鏈接。建議通過優(yōu)化應(yīng)用程序的效率來提高處理能力派近,而不是簡單地Reset攀唯。默認值為0。 |
net.ipv4.route.max_size | 內(nèi)核所允許的最大路由數(shù)目渴丸。 |
net.ipv4.ip_forward | 接口間轉(zhuǎn)發(fā)報文侯嘀。 |
net.ipv4.ip_default_ttl | 報文可以經(jīng)過的最大跳數(shù)。 |
net.netfilter.nf_conntrack_tcp_timeout_established | 在指定之間內(nèi)谱轨,已經(jīng)建立的連接如果沒有活動戒幔,則通過iptables進行清除。 |
net.netfilter.nf_conntrack_max | 哈希表項最大值土童。 |
更多有關(guān)內(nèi)核參數(shù)的信息诗茎,請參考如下鏈接。
- Linux man-pages
- kernel/git/torvalds/linux.git_proc
- kernel/git/torvalds/linux.git_proc_net_tcp
- kernel/git/torvalds/linux.git_ip-sysctl
- kernel/git/torvalds/linux.git_netfilter-sysctl
- kernel/git/torvalds/linux.git_nf_conntrack-sysctl
適用于
- 云服務(wù)器 ECS