Linux 生產(chǎn)內(nèi)核網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)分析

Linux 生產(chǎn)內(nèi)核網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)分析

本文總結(jié)了常見的 Linux 內(nèi)核參數(shù)及相關(guān)問題斑胜。修改內(nèi)核參數(shù)前呀舔,您需要:

  • 從實(shí)際需要出發(fā)眯牧,最好有相關(guān)數(shù)據(jù)的支撐诚亚,不建議隨意調(diào)整內(nèi)核參數(shù)。
  • 了解參數(shù)的具體作用滴某,且注意同類型或版本環(huán)境的內(nèi)核參數(shù)可能有所不同磅摹。

1. 查看和修改 Linux 實(shí)例內(nèi)核參數(shù)

1.1 方法一

通過 /proc/sys/ 目錄

  • 查看內(nèi)核參數(shù): 使用 cat 查看對(duì)應(yīng)文件的內(nèi)容,例如執(zhí)行命令 cat /proc/sys/net/ipv4/tcp_tw_recycle 查看 net.ipv4.tcp_tw_recycle 的值霎奢。

  • 修改內(nèi)核參數(shù): 使用 echo 修改內(nèi)核參數(shù)對(duì)應(yīng)的文件户誓,例如執(zhí)行命令 echo "0" > /proc/sys/net/ipv4/tcp_tw_recyclenet.ipv4.tcp_tw_recycle 的值修改為 0。

注意

  • /proc/sys/ 目錄是 Linux 內(nèi)核在啟動(dòng)后生成的偽目錄幕侠,其目錄下的 net 文件夾中存放了當(dāng)前系統(tǒng)中開啟的所有內(nèi)核參數(shù)帝美、目錄樹結(jié)構(gòu)與參數(shù)的完整名稱相關(guān),如 net.ipv4.tcp_tw_recycle橙依,它對(duì)應(yīng)的文件是 /proc/sys/net/ipv4/tcp_tw_recycle证舟,文件的內(nèi)容就是參數(shù)值。
  • 方法一 修改的參數(shù)值僅在當(dāng)次運(yùn)行中生效窗骑,系統(tǒng)重啟后會(huì)回滾歷史值女责,一般用于臨時(shí)性的驗(yàn)證修改的效果。若需要永久性修改创译,請(qǐng)參閱 方法二(https://help.aliyun.com/knowledge_detail/41334.html#method2)抵知。

1.2 方法二

通過 sysctl.conf 文件

  • 查看內(nèi)核參數(shù): 執(zhí)行命令 sysctl -a 查看當(dāng)前系統(tǒng)中生效的所有參數(shù)。

  • 修改內(nèi)核參數(shù):

  • 執(zhí)行命令 /sbin/sysctl -w kernel.parameter="example" 修改參數(shù)软族,如sysctl -w net.ipv4.tcp_tw_recycle="0"刷喜。

  • 執(zhí)行命令 vi /etc/sysctl.conf 修改 /etc/sysctl.conf 文件中的參數(shù)。

  • 執(zhí)行命令 /sbin/sysctl -p 使配置生效立砸。

:調(diào)整內(nèi)核參數(shù)后內(nèi)核處于不穩(wěn)定狀態(tài)掖疮,請(qǐng)務(wù)必重啟實(shí)例。

2. Linux 網(wǎng)絡(luò)相關(guān)內(nèi)核參數(shù)引發(fā)的常見問題及處理

2.1 Linux 實(shí)例 NAT 哈希表滿導(dǎo)致丟包

此處涉及的內(nèi)核參數(shù):

net.netfilter.nf_conntrack_buckets
net.nf_conntrack_max

2.1.1 問題現(xiàn)象

Linux 實(shí)例出現(xiàn)間歇性丟包颗祝,無法連接實(shí)例浊闪,通過 tracert、mtr 等工具排查螺戳,外部網(wǎng)絡(luò)未見異常搁宾。同時(shí),如下圖所示倔幼,在系統(tǒng)日志中重復(fù)出現(xiàn)大量(table full, dropping packet.)錯(cuò)誤信息盖腿。

Feb  6  16:05:07 i-*** kernel: nf_conntrack: table full, dropping packet.

2.1.2 原因分析

ip_conntrack 是 Linux 系統(tǒng)內(nèi) NAT 的一個(gè)跟蹤連接條目的模塊。ip_conntrack 模塊會(huì)使用一個(gè)哈希表記錄 TCP 協(xié)議 established connection 記錄,當(dāng)這個(gè)哈希表滿了的時(shí)候翩腐,便會(huì)導(dǎo)致 nf_conntrack: table full, dropping packet 錯(cuò)誤鸟款。Linux 系統(tǒng)會(huì)開辟一個(gè)空間用來維護(hù)每一個(gè) TCP 鏈接,這個(gè)空間的大小與 nf_conntrack_buckets茂卦、nf_conntrack_max 相關(guān)欠雌,后者的默認(rèn)值是前者的 4 倍,而前者在系統(tǒng)啟動(dòng)后無法修改疙筹,所以一般都是建議調(diào)大 nf_conntrack_max

注意:系統(tǒng)維護(hù)連接比較消耗內(nèi)存禁炒,請(qǐng)?jiān)谙到y(tǒng)空閑和內(nèi)存充足的情況下調(diào)大 nf_conntrack_max而咆,且根據(jù)系統(tǒng)的情況而定。

2.1.3 決思路

  1. 使用管理終端登錄實(shí)例幕袱。

  2. 執(zhí)行命令 # vi /etc/sysctl.conf 編輯系統(tǒng)內(nèi)核配置暴备。

  3. 修改哈希表項(xiàng)最大值參數(shù):net.netfilter.nf_conntrack_max = 655350

  4. 修改超時(shí)參數(shù):net.netfilter.nf_conntrack_tcp_timeout_established = 1200们豌,默認(rèn)情況下 timeout 是 432000(秒)涯捻。

  5. 執(zhí)行命令 # sysctl -p 使配置生效。

2.2 Time wait bucket table overflow 報(bào)錯(cuò)

此處涉及的內(nèi)核參數(shù):

  • net.ipv4.tcp_max_tw_buckets

2.2.1 問題現(xiàn)象

Linux 實(shí)例 /var/log/message 日志全是類似 kernel: TCP: time wait bucket table overflow 的報(bào)錯(cuò)信息望迎,提示 time wait bucket table 溢出障癌,如下:

Feb  18  12:28:38 i-*** kernel: TCP: time wait bucket table overflow
Feb  18  12:28:44 i-*** kernel: printk:  227 messages suppressed.

執(zhí)行命令 netstat -ant|grep TIME_WAIT|wc -l 統(tǒng)計(jì)處于 TIME_WAIT 狀態(tài)的 TCP 連接數(shù),發(fā)現(xiàn)處于 TIME_WAIT 狀態(tài)的 TCP 連接非常多辩尊。

2.2.2 原因分析

參數(shù) net.ipv4.tcp_max_tw_buckets 可以調(diào)整內(nèi)核中管理 TIME_WAIT 狀態(tài)的數(shù)量涛浙,當(dāng)實(shí)例中處于 TIME_WAIT 及需要轉(zhuǎn)換為 TIME_WAIT 狀態(tài)連接數(shù)之和超過了 net.ipv4.tcp_max_tw_buckets 參數(shù)值時(shí),message 日志中將報(bào)錯(cuò) time wait bucket table摄欲,同時(shí)內(nèi)核關(guān)閉超出參數(shù)值的部分 TCP 連接轿亮。您需要根據(jù)實(shí)際情況適當(dāng)調(diào)高 net.ipv4.tcp_max_tw_buckets,同時(shí)從業(yè)務(wù)層面去改進(jìn) TCP 連接胸墙。

2.2.3 解決思路

  1. 執(zhí)行命令 netstat -anp |grep tcp |wc -l 統(tǒng)計(jì) TCP 連接數(shù)我注。

  2. 執(zhí)行命令 vi /etc/sysctl.conf,查詢 net.ipv4.tcp_max_tw_buckets 參數(shù)迟隅。如果確認(rèn)連接使用很高但骨,容易超出限制。

  3. 調(diào)高參數(shù) net.ipv4.tcp_max_tw_buckets玻淑,擴(kuò)大限制嗽冒。

  4. 執(zhí)行命令 # sysctl -p 使配置生效。

2.3 Linux 實(shí)例中 FIN_WAIT2 狀態(tài)的 TCP 鏈接過多

此處涉及的內(nèi)核參數(shù):

  • net.ipv4.tcp_fin_timeout

2.3.1 問題現(xiàn)象

FIN_WAIT2 狀態(tài)的 TCP 鏈接過多补履。

2.3.2 原因分析

  • 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_WAIT_2 狀態(tài)將保持到系統(tǒng)重啟,越來越多的 FIN_WAIT_2 狀態(tài)會(huì)致使內(nèi)核 Crash野蝇。
  • 建議調(diào)小 net.ipv4.tcp_fin_timeout 參數(shù)讼稚,減少這個(gè)數(shù)值以便加快系統(tǒng)關(guān)閉處于 FIN_WAIT2 狀態(tài)的 TCP 連接。

2.3.3 解決思路

  • 執(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 連接會(huì)進(jìn)入 TIME_WAIT 狀態(tài),請(qǐng)同時(shí)參閱 time wait bucket table overflow 報(bào)錯(cuò)乍狐。

2.4 Linux 實(shí)例中出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的 TCP 連接

2.4.1 問題現(xiàn)象

執(zhí)行命令 netstat -atn|grep CLOSE_WAIT|wc -l 發(fā)現(xiàn)當(dāng)前系統(tǒng)中處于 CLOSE_WAIT 狀態(tài)的 TCP 連接非常多赠摇。

2.4.2 原因分析

關(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ù)層面及時(shí)判斷某個(gè)連接是否已經(jīng)被對(duì)端關(guān)閉收津,即在程序邏輯中對(duì)連接及時(shí)關(guān)閉檢查。

2.4.3 解決思路

編程語言中對(duì)應(yīng)的讀浊伙、寫函數(shù)一般包含了檢測(cè) CLOSE_WAIT TCP 連接功能撞秋,例如:

Java 語言

  1. 通過 read 方法來判斷 I/O 。當(dāng) read 方法返回 -1 時(shí)則表示已經(jīng)到達(dá)末尾嚣鄙。
  2. 通過 close 方法關(guān)閉該鏈接吻贿。

C 語言

  1. 檢查 read 的返回值。
    • 若等于 0 則可以關(guān)閉該連接哑子。
    • 若小于 0 則查看 errno舅列,若不是 AGAIN 則同樣可以關(guān)閉連接。

2.5 客戶端配置 NAT 后仍無法訪問 ECS 或 RDS 遠(yuǎn)端服務(wù)器

此處涉及的內(nèi)核參數(shù):

  • net.ipv4.tcp_tw_recycle
  • net.ipv4.tcp_timestamps

2.5.1 問題現(xiàn)象

客戶端配置 NAT 后無法訪問遠(yuǎn)端 ECS卧蜓、RDS帐要,包括配置了 SNAT 的 VPC ECS 。同時(shí)無法訪問連接其他 ECS 或 RDS 等云產(chǎn)品弥奸,抓包檢測(cè)發(fā)現(xiàn)遠(yuǎn)端對(duì)客戶端發(fā)送的 SYN 包沒有響應(yīng)榨惠。

2.5.2 原因分析

若遠(yuǎn)端服務(wù)器的內(nèi)核參數(shù) net.ipv4.tcp_tw_recyclenet.ipv4.tcp_timestamps 的值都為 1,則遠(yuǎn)端服務(wù)器會(huì)檢查每一個(gè)報(bào)文中的時(shí)間戳(Timestamp),若 Timestamp 不是遞增的關(guān)系赠橙,不會(huì)響應(yīng)這個(gè)報(bào)文耽装。配置 NAT 后,遠(yuǎn)端服務(wù)器看到來自不同的客戶端的源 IP 相同期揪,但 NAT 前每一臺(tái)客戶端的時(shí)間可能會(huì)有偏差掉奄,報(bào)文中的 Timestamp 就不是遞增的情況。

2.5.3 解決思路

  • 遠(yuǎn)端服務(wù)器為 ECS 時(shí)凤薛,修改參數(shù) net.ipv4.tcp_tw_recycle 為 0姓建。
  • 遠(yuǎn)端服務(wù)器為 RDS 等 PaaS 服務(wù)時(shí)。RDS 無法直接修改內(nèi)核參數(shù)缤苫,需要在客戶端上修改參數(shù) net.ipv4.tcp_tw_recyclenet.ipv4.tcp_timestamps 為 0引瀑。

3. 總結(jié), 以上涉及 Linux 內(nèi)核參數(shù)說明

參數(shù) 說明
net.ipv4.tcp_max_syn_backlog 該參數(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_syncookies 該參數(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ù)做一定的修改,即死陆,在響應(yīng)的 SYN+ACK 包中招拙,初始的序列號(hào)是由源 IP + Port、目的 IP + Port 及時(shí)間這五個(gè)參數(shù)共同計(jì)算出一個(gè)值組成精心組裝的 TCP 包措译。由于 ACK 包中確認(rèn)的序列號(hào)并不是之前計(jì)算出的值别凤,惡意攻擊者無法響應(yīng)或誤判,而請(qǐng)求者會(huì)根據(jù)收到的 SYN+ACK 包做正確的響應(yīng)领虹。啟用 net.ipv4.tcp_syncookies 后规哪,會(huì)忽略 net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_synack_retries 該參數(shù)指明了處于 SYN_RECV 狀態(tài)時(shí)重傳 SYN+ACK 包的次數(shù)塌衰。
net.ipv4.tcp_abort_on_overflow 設(shè)置該參數(shù)為 1 時(shí)诉稍,當(dāng)系統(tǒng)在短時(shí)間內(nèi)收到了大量的請(qǐng)求,而相關(guān)的應(yīng)用程序未能處理時(shí)最疆,就會(huì)發(fā)送 Reset 包直接終止這些鏈接杯巨。建議通過優(yōu)化應(yīng)用程序的效率來提高處理能力,而不是簡單地 Reset努酸。默認(rèn)值: 0
net.core.somaxconn 該參數(shù)定義了系統(tǒng)中每一個(gè)端口最大的監(jiān)聽隊(duì)列的長度服爷,是個(gè)全局參數(shù)。該參數(shù)和 net.ipv4.tcp_max_syn_backlog 有關(guān)聯(lián),后者指的是還在三次握手的半連接的上限层扶,該參數(shù)指的是處于 ESTABLISHED 的數(shù)量上限箫章。若您的 ECS 實(shí)例業(yè)務(wù)負(fù)載很高,則有必要調(diào)高該參數(shù)镜会。listen(2) 函數(shù)中的參數(shù) backlog 同樣是指明監(jiān)聽的端口處于 ESTABLISHED 的數(shù)量上限檬寂,當(dāng) backlog 大于 net.core.somaxconn時(shí),以 net.core.somaxconn 參數(shù)為準(zhǔn)戳表。
net.core.netdev_max_backlog 當(dāng)內(nèi)核處理速度比網(wǎng)卡接收速度慢時(shí)桶至,這部分多出來的包就會(huì)被保存在網(wǎng)卡的接收隊(duì)列上,而該參數(shù)說明了這個(gè)隊(duì)列的數(shù)量上限匾旭。

4. 生產(chǎn)集群內(nèi)核配置參考

  • 4.1 參考1: 筆者所在公司的 Iot 生產(chǎn)環(huán)境 EMQ 集群的 sysctl.conf 配置 (CentOS 7.4 4C 32G)
# see: https://www.kernel.org/doc/Documentation/sysctl

fs.file-max = 1048576
fs.nr_open = 2097152

net.core.somaxconn = 32768
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 8192

net.ipv4.tcp_mem = 378798 505064 757596
net.ipv4.tcp_rmem = 1024 4096 16777216
net.ipv4.tcp_wmem = 1024 4096 16777216
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024  65000

net.nf_conntrack_max = 262144

net.netfilter.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30
# see: https://www.kernel.org/doc/Documentation/sysctl
#############################################################################################
# 調(diào)整虛擬內(nèi)存
#############################################################################################

# Default: 30
# 0 - 任何情況下都不使用swap镣屹。
# 1 - 除非內(nèi)存不足(OOM),否則不使用swap价涝。
vm.swappiness = 0

# 內(nèi)存分配策略
#0 - 表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用女蜈;如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)?jiān)试S色瘩;否則伪窖,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程居兆。
#1 - 表示內(nèi)核允許分配所有的物理內(nèi)存覆山,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
#2 - 表示內(nèi)核允許分配超過所有物理內(nèi)存和交換空間總和的內(nèi)存
vm.overcommit_memory=1

# OOM時(shí)處理
# 1關(guān)閉泥栖,等于0時(shí)簇宽,表示當(dāng)內(nèi)存耗盡時(shí),內(nèi)核會(huì)觸發(fā)OOM killer殺掉最耗內(nèi)存的進(jìn)程吧享。
vm.panic_on_oom=0

# vm.dirty_background_ratio 用于調(diào)整內(nèi)核如何處理必須刷新到磁盤的臟頁魏割。
# Default value is 10.
# 該值是系統(tǒng)內(nèi)存總量的百分比,在許多情況下將此值設(shè)置為5是合適的钢颂。
# 此設(shè)置不應(yīng)設(shè)置為零见妒。
vm.dirty_background_ratio = 5

# 內(nèi)核強(qiáng)制同步操作將其刷新到磁盤之前允許的臟頁總數(shù)
# 也可以通過更改 vm.dirty_ratio 的值(將其增加到默認(rèn)值30以上(也占系統(tǒng)內(nèi)存的百分比))來增加
# 推薦 vm.dirty_ratio 的值在60到80之間。
vm.dirty_ratio = 60

# vm.max_map_count 計(jì)算當(dāng)前的內(nèi)存映射文件數(shù)甸陌。
# mmap 限制(vm.max_map_count)的最小值是打開文件的ulimit數(shù)量(cat /proc/sys/fs/file-max)须揣。
# 每128KB系統(tǒng)內(nèi)存 map_count應(yīng)該大約為1。 因此钱豁,在32GB系統(tǒng)上耻卡,max_map_count為262144比吭。
# Default: 65530
vm.max_map_count = 2097152

#############################################################################################
# 調(diào)整文件
#############################################################################################

fs.may_detach_mounts = 1

# 增加文件句柄和inode緩存的大小枕扫,并限制核心轉(zhuǎn)儲(chǔ)。
fs.file-max = 2097152
fs.nr_open = 2097152
fs.suid_dumpable = 0

# 文件監(jiān)控
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=524288
fs.inotify.max_queued_events=16384

#############################################################################################
# 調(diào)整網(wǎng)絡(luò)設(shè)置
#############################################################################################

# 為每個(gè)套接字的發(fā)送和接收緩沖區(qū)分配的默認(rèn)內(nèi)存量熙掺。
net.core.wmem_default = 25165824
net.core.rmem_default = 25165824

# 為每個(gè)套接字的發(fā)送和接收緩沖區(qū)分配的最大內(nèi)存量。
net.core.wmem_max = 25165824
net.core.rmem_max = 25165824

# 除了套接字設(shè)置外溃卡,發(fā)送和接收緩沖區(qū)的大小
# 必須使用net.ipv4.tcp_wmem和net.ipv4.tcp_rmem參數(shù)分別設(shè)置TCP套接字溢豆。
# 使用三個(gè)以空格分隔的整數(shù)設(shè)置這些整數(shù),分別指定最小瘸羡,默認(rèn)和最大大小漩仙。
# 最大大小不能大于使用net.core.wmem_max和net.core.rmem_max為所有套接字指定的值。
# 合理的設(shè)置是最小4KiB犹赖,默認(rèn)64KiB和最大2MiB緩沖區(qū)队他。
net.ipv4.tcp_wmem = 20480 12582912 25165824
net.ipv4.tcp_rmem = 20480 12582912 25165824

# 增加最大可分配的總緩沖區(qū)空間
# 以頁為單位(4096字節(jié))進(jìn)行度量
net.ipv4.tcp_mem = 65536 25165824 262144
net.ipv4.udp_mem = 65536 25165824 262144

# 為每個(gè)套接字的發(fā)送和接收緩沖區(qū)分配的最小內(nèi)存量。
net.ipv4.udp_wmem_min = 16384
net.ipv4.udp_rmem_min = 16384

# 啟用TCP窗口縮放峻村,客戶端可以更有效地傳輸數(shù)據(jù)麸折,并允許在代理方緩沖該數(shù)據(jù)。
net.ipv4.tcp_window_scaling = 1

# 提高同時(shí)接受連接數(shù)粘昨。
net.ipv4.tcp_max_syn_backlog = 10240

# 將net.core.netdev_max_backlog的值增加到大于默認(rèn)值1000
# 可以幫助突發(fā)網(wǎng)絡(luò)流量垢啼,特別是在使用數(shù)千兆位網(wǎng)絡(luò)連接速度時(shí),
# 通過允許更多的數(shù)據(jù)包排隊(duì)等待內(nèi)核處理它們张肾。
net.core.netdev_max_backlog = 65536

# 增加選項(xiàng)內(nèi)存緩沖區(qū)的最大數(shù)量
net.core.optmem_max = 25165824

# 被動(dòng)TCP連接的SYNACK次數(shù)芭析。
net.ipv4.tcp_synack_retries = 2

# 允許的本地端口范圍。
net.ipv4.ip_local_port_range = 2048 65535

# 防止TCP時(shí)間等待
# Default: net.ipv4.tcp_rfc1337 = 0
net.ipv4.tcp_rfc1337 = 1

# 減少tcp_fin_timeout連接的時(shí)間默認(rèn)值
net.ipv4.tcp_fin_timeout = 15

# 積壓套接字的最大數(shù)量捌浩。
# Default is 128.
net.core.somaxconn = 32768

# 打開syncookies以進(jìn)行SYN洪水攻擊保護(hù)。
net.ipv4.tcp_syncookies = 1

# 避免Smurf攻擊
# 發(fā)送偽裝的ICMP數(shù)據(jù)包工秩,目的地址設(shè)為某個(gè)網(wǎng)絡(luò)的廣播地址尸饺,源地址設(shè)為要攻擊的目的主機(jī),
# 使所有收到此ICMP數(shù)據(jù)包的主機(jī)都將對(duì)目的主機(jī)發(fā)出一個(gè)回應(yīng)助币,使被攻擊主機(jī)在某一段時(shí)間內(nèi)收到成千上萬的數(shù)據(jù)包
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 為icmp錯(cuò)誤消息打開保護(hù)
net.ipv4.icmp_ignore_bogus_error_responses = 1

# 啟用自動(dòng)縮放窗口浪听。
# 如果延遲證明合理,這將允許TCP緩沖區(qū)超過其通常的最大值64K眉菱。
net.ipv4.tcp_window_scaling = 1

# 打開并記錄欺騙迹栓,源路由和重定向數(shù)據(jù)包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# 告訴內(nèi)核有多少個(gè)未附加的TCP套接字維護(hù)用戶文件句柄。 萬一超過這個(gè)數(shù)字俭缓,
# 孤立的連接會(huì)立即重置克伊,并顯示警告。
# Default: net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_max_orphans = 65536

# 不要在關(guān)閉連接時(shí)緩存指標(biāo)
net.ipv4.tcp_no_metrics_save = 1

# 啟用RFC1323中定義的時(shí)間戳記:
# Default: net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_timestamps = 1

# 啟用選擇確認(rèn)华坦。
# Default: net.ipv4.tcp_sack = 1
net.ipv4.tcp_sack = 1

# 增加 tcp-time-wait 存儲(chǔ)桶池大小愿吹,以防止簡單的DOS攻擊。
# net.ipv4.tcp_tw_recycle 已從Linux 4.12中刪除惜姐。請(qǐng)改用net.ipv4.tcp_tw_reuse犁跪。
net.ipv4.tcp_max_tw_buckets = 14400
net.ipv4.tcp_tw_reuse = 1

# accept_source_route 選項(xiàng)使網(wǎng)絡(luò)接口接受設(shè)置了嚴(yán)格源路由(SSR)或松散源路由(LSR)選項(xiàng)的數(shù)據(jù)包椿息。
# 以下設(shè)置將丟棄設(shè)置了SSR或LSR選項(xiàng)的數(shù)據(jù)包。
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 打開反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用ICMP重定向接受
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

# 禁止發(fā)送所有IPv4 ICMP重定向數(shù)據(jù)包坷衍。
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# 開啟IP轉(zhuǎn)發(fā).
net.ipv4.ip_forward = 1

# 禁止IPv6
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# 要求iptables不對(duì)bridge的數(shù)據(jù)進(jìn)行處理
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

# arp緩存
# 存在于 ARP 高速緩存中的最少層數(shù)寝优,如果少于這個(gè)數(shù),垃圾收集器將不會(huì)運(yùn)行枫耳。缺省值是 128
net.ipv4.neigh.default.gc_thresh1=2048
# 保存在 ARP 高速緩存中的最多的記錄軟限制乏矾。垃圾收集器在開始收集前,允許記錄數(shù)超過這個(gè)數(shù)字 5 秒嘉涌。缺省值是 512
net.ipv4.neigh.default.gc_thresh2=4096
# 保存在 ARP 高速緩存中的最多記錄的硬限制妻熊,一旦高速緩存中的數(shù)目高于此,垃圾收集器將馬上運(yùn)行仑最。缺省值是 1024
net.ipv4.neigh.default.gc_thresh3=8192

# 持久連接
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10

# conntrack表
net.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_buckets=262144
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300

#############################################################################################
# 調(diào)整內(nèi)核參數(shù)
#############################################################################################

# 地址空間布局隨機(jī)化(ASLR)是一種用于操作系統(tǒng)的內(nèi)存保護(hù)過程扔役,可防止緩沖區(qū)溢出攻擊。
# 這有助于確保與系統(tǒng)上正在運(yùn)行的進(jìn)程相關(guān)聯(lián)的內(nèi)存地址不可預(yù)測(cè)警医,
# 因此亿胸,與這些流程相關(guān)的缺陷或漏洞將更加難以利用。
# Accepted values: 0 = 關(guān)閉, 1 = 保守隨機(jī)化, 2 = 完全隨機(jī)化
kernel.randomize_va_space = 2

# 調(diào)高 PID 數(shù)量
kernel.pid_max = 65536
kernel.threads-max=30938

# coredump
kernel.core_pattern=core

# 決定了檢測(cè)到soft lockup時(shí)是否自動(dòng)panic预皇,缺省值是0
kernel.softlockup_all_cpu_backtrace=1
kernel.softlockup_panic=1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侈玄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吟温,更是在濱河造成了極大的恐慌序仙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲁豪,死亡現(xiàn)場(chǎng)離奇詭異潘悼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)爬橡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門治唤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糙申,你說我怎么就攤上這事宾添。” “怎么了柜裸?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵缕陕,是天一觀的道長。 經(jīng)常有香客問我疙挺,道長榄檬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任衔统,我火速辦了婚禮鹿榜,結(jié)果婚禮上海雪,老公的妹妹穿的比我還像新娘。我一直安慰自己舱殿,他們只是感情好奥裸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沪袭,像睡著了一般湾宙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冈绊,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天侠鳄,我揣著相機(jī)與錄音,去河邊找鬼死宣。 笑死伟恶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的毅该。 我是一名探鬼主播博秫,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼眶掌!你這毒婦竟也來了挡育?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤朴爬,失蹤者是張志新(化名)和其女友劉穎即寒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召噩,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡母赵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚣常。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片市咽。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痊银,死狀恐怖抵蚊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溯革,我是刑警寧澤贞绳,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站致稀,受9級(jí)特大地震影響冈闭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抖单,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一萎攒、第九天 我趴在偏房一處隱蔽的房頂上張望遇八。 院中可真熱鬧,春花似錦耍休、人聲如沸刃永。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斯够。三九已至,卻和暖如春喧锦,著一層夾襖步出監(jiān)牢的瞬間读规,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工燃少, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留束亏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓供汛,卻偏偏與公主長得像枪汪,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怔昨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353