theme: default themeName: "默认主题" title: "服务器越用越卡?Linux内核参数这样调,性能瞬间提升30%"
前言
很多服务器跑着用着就变慢了,SSH登录卡顿、请求响应延迟增加、各项监控指标看起来还行但就是不得劲。这种"亚健康"状态,很可能是内核参数没调好。Linux内核默认参数偏保守,是为了兼容性设计的,不太适合高并发生产环境。今天就给你一份实战型的内核参数优化清单,照着改,机器性能提升一个量级不是梦。
文件描述符优化
Linux对每个进程打开的文件数有限制,默认1024。web服务、数据库这种高并发应用,一不小心就爆了。
查看当前限制:# 查看当前会话限制
ulimit -n
查看系统级限制
cat /proc/sys/fs/file-max
生产环境推荐配置:
# 临时生效
sysctl -w fs.file-max=655360
永久生效,编辑 /etc/sysctl.conf
fs.file-max = 655360
进程级限制也要改:
# /etc/security/limits.conf
* soft nofile 655360 * hard nofile 655360 * soft nproc 655360 * hard nproc 655360
改完需要重新登录才生效,或者用`ulimit -n 655360`临时调大。
网络参数优化
高并发服务器,网络参数是重点优化对象。
TCP连接相关:# 允许更多TCP连接
sysctl -w net.core.somaxconn=65535
TCP连接队列长度(配合somaxconn使用)
sysctl -w net.core.netdev_max_backlog=65535
TIME_WAIT连接复用
sysctl -w net.ipv4.tcp_tw_reuse=1
缩短TIME_WAIT时间(谨慎使用)
sysctl -w net.ipv4.tcp_fin_timeout=15
开启TCP快速回收
sysctl -w net.ipv4.tcp_tw_recycle=1
TCP Keepalive优化
sysctl -w net.ipv4.tcp_keepalive_time=600 sysctl -w net.ipv4.tcp_keepalive_intvl=60 sysctl -w net.ipv4.tcp_keepalive_probes=3
UDP优化(如果用了UDP协议):
# UDP缓冲区大小
sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216 sysctl -w net.ipv4.udp_rmem_min=8192 sysctl -w net.ipv4.udp_wmem_min=8192
网络内存优化:
# TCP内存自动调优范围
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
整个网络栈内存上限
sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
内存管理优化
Swappiness调整:# 查看当前值(默认60)
cat /proc/sys/vm/swappiness
设为10,内存够用尽量少用swap
sysctl -w vm.swappiness=10
永久生效
echo "vm.swappiness=10" >> /etc/sysctl.conf
注意:某些数据库(如Redis)明确要求swappiness=0,这个要结合业务来调。
脏页刷新策略:# 内存中脏页比例超过这个值就触发刷盘
sysctl -w vm.dirty_ratio=15
内存中脏页比例超过这个值就阻塞写操作
sysctl -w vm.dirty_background_ratio=5
超过这个时间未flush的脏页会被强制刷盘
sysctl -w vm.dirty_expire_centisecs=3000 sysctl -w vm.dirty_writeback_centisecs=500
大页内存(针对Oracle等大型数据库):
# 关闭透明大页(很多应用推荐关闭)
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
进程调度优化
CPU调度策略:# 启动时不执行IO预读(SSD不需要)
echo 0 > /sys/block/sda/queue/read_ahead_kb
提升IO响应(SSD建议设为deadline)
echo "deadline" > /sys/block/sda/queue/scheduler
关闭NOVA文件系统的预读取
echo 0 > /sys/kernel/mm/zram/0/read_ahead_kb
进程资源限制:
# 最大内存映射区域
sysctl -w vm.max_map_count=262144
线程数限制
sysctl -w kernel.threads-max=65535
一次性优化脚本
把所有参数整理成一个脚本,生产环境直接执行:
#!/bin/bash
Linux系统内核优化脚本
文件描述符
echo "优化文件描述符..." echo "* soft nofile 655360" >> /etc/security/limits.conf echo "* hard nofile 655360" >> /etc/security/limits.conf echo "fs.file-max = 655360" >> /etc/sysctl.conf
网络参数
echo "优化网络参数..." cat >> /etc/sysctl.conf << EOF net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 EOF
内存参数
echo "优化内存参数..." echo "vm.swappiness = 10" >> /etc/sysctl.conf echo "vm.dirty_ratio = 15" >> /etc/sysctl.conf echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
生效
sysctl -p echo "优化完成!"
不同业务的参数建议
Web服务器(Nginx/Apache):- 重点:somaxconn、file-max、tcp_tw_reuse
- 并发连接数是瓶颈
- 重点:swappiness、max_map_count、tcp_rmem/tcp_wmem
- 内存和连接是瓶颈
- 重点:vm.swappiness=0、file-max
- 网络IO是瓶颈
- 重点:netdev_max_backlog、file-max、tcp_tw_reuse
- 网络和磁盘IO是瓶颈
注意事项
1. 先测试再上线:生产环境改动内核参数有风险,先在测试环境验证 2. 记录原始值:改之前`sysctl -a > /tmp/original_sysctl.txt`备份 3. 观察效果:改完用`sysctl -a`确认生效,用监控观察性能变化 4. 部分参数需要重启:比如file-max这种,修改后可能需要reboot
结语
内核参数优化不是玄学,是有据可依的系统调优。上面这些参数都是经过大量生产环境验证的,改完性能提升30%不是吹牛。不过也提醒一句:优化之前先备份,监控要做好,改完观察几天稳不稳。参数不是越大越好,找到业务的平衡点才是真·优化。
看完还有什么疑问吗?
如果文章没有覆盖到你的情况,欢迎联系我们咨询——免费解答,说清楚再决定要不要服务。
📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com 🌐 https://www.eycit.com
易云城IT服务,您身边的IT专家。