Linux 系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實戰(zhàn)指南
今天分享一下sysctl.conf配置文件的調(diào)優(yōu)。
1. 什么是 sysctl.conf?
sysctl.conf 是 Linux 系統(tǒng)中用于配置內(nèi)核參數(shù)的文件,通常位于 /etc/sysctl.conf。這些參數(shù)控制著內(nèi)核層面網(wǎng)絡(luò)、內(nèi)存、進(jìn)程資源、安全策略等多個關(guān)鍵方面。
命令動態(tài)設(shè)置:
sysctl -w 參數(shù)名=值
也可以寫入 /etc/sysctl.conf 并用如下命令永久生效:
sysctl -p
2. 網(wǎng)絡(luò)性能調(diào)優(yōu)
高并發(fā)服務(wù)、微服務(wù)網(wǎng)關(guān)或負(fù)載均衡器對 TCP/IP 棧有更高要求。以下參數(shù)可有效提升網(wǎng)絡(luò)吞吐與連接性能:
# 開啟 IP 轉(zhuǎn)發(fā)(容器/路由場景必備)
net.ipv4.ip_forward = 1
# 防止 SYN Flood 攻擊
net.ipv4.tcp_syncookies = 1
# TIME_WAIT 優(yōu)化:開啟端口重用
net.ipv4.tcp_tw_reuse = 1
# TCP連接關(guān)閉延遲時間
net.ipv4.tcp_fin_timeout = 15
# 增加TCP隊列長度,應(yīng)對突發(fā)高連接數(shù)
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
# Socket緩沖區(qū)優(yōu)化
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
適用場景:
- Nginx、HAProxy、Traefik 等網(wǎng)關(guān)
- 大量客戶端短連接的微服務(wù)
- TCP 粘連/連接池優(yōu)化
3. 內(nèi)存管理優(yōu)化
合理的內(nèi)存策略對系統(tǒng)穩(wěn)定性至關(guān)重要:
# 控制交換空間使用傾向(建議調(diào)低)
vm.swappiness = 10
# 降低 dirty 頁面回寫延遲
vm.dirty_writeback_centisecs = 500
# 控制系統(tǒng)使用多少內(nèi)存做緩存
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 限制進(jìn)程申請超出物理內(nèi)存的能力
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
適用場景:
- Redis、MySQL、PostgreSQL 等對物理內(nèi)存要求嚴(yán)格的服務(wù)
- 防止 OOM 殺手頻繁觸發(fā)
4. 文件句柄與并發(fā)連接限制
Linux 默認(rèn)最多只能打開 1024 個文件,對于高并發(fā)服務(wù)遠(yuǎn)遠(yuǎn)不夠。
fs.file-max = 2097152
此外,修改用戶級別限制:
編輯 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
并在 /etc/pam.d/common-session 或 /etc/pam.d/login 添加:
session required pam_limits.so
適用場景: 高并發(fā) API 服務(wù)、反向代理、WebSocket 長連接系統(tǒng)
5. 安全性與穩(wěn)定性設(shè)置
強(qiáng)化內(nèi)核層安全,防止被動攻擊或意外干擾。
# 禁止接受 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 禁止發(fā)送重定向包
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 防止 IP 偽造攻擊
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁止源路由包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
6. 一鍵應(yīng)用配置方法
查看當(dāng)前內(nèi)核參數(shù):
sysctl -a | grep tcp
立即生效配置:
sysctl -p
推薦保存位置: 所有參數(shù)寫入 /etc/sysctl.conf 或分模塊寫入 /etc/sysctl.d/99-custom.conf 更具維護(hù)性。
7. 推薦完整 sysctl.conf 模板
這個是建議的配置,可以直接使用:
# 文件句柄
fs.file-max = 2097152
# 網(wǎng)絡(luò)優(yōu)化
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 16384
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_forward = 1
# 內(nèi)存優(yōu)化
vm.swappiness = 10
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.dirty_writeback_centisecs = 500
# 安全強(qiáng)化
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
Linux 內(nèi)核參數(shù)調(diào)優(yōu)并非“設(shè)置越大越好”,而是基于業(yè)務(wù)場景、負(fù)載模型與服務(wù)類型的科學(xué)調(diào)整。