Linux性能优化需先定位瓶颈再分层处理:用top、iostat、netstat、vmstat等工具诊断CPU、磁盘、网络、内存问题;针对性调优CPU(禁服务、亲和性、cpulimit)、内存(swappiness、I/O调度器)、网络(conntrack、fin_timeout);坚持持续验证、单变量迭代。

Linux性能优化不是调几个参数就完事,关键在找准瓶颈、分层处理、持续验证。盲目改内核参数或加内存,可能适得其反。
定位真实瓶颈,别猜
先用基础工具快速圈定问题域:用 top 或 htop 看 CPU 和内存占用大户;用 iostat -x 1 查磁盘 I/O 等待和 %util;用 .netstat -s 或 ss -i 观察网络重传、队列堆积;用 vmstat 1 综合看上下文切换、缺页、swap 活动。
- 如果 wa% 长期超 20%,优先查磁盘或 NFS 延迟
- 如果 si/so 不为零,说明内存压力大,正在频繁 swap
- 如果 cs(上下文切换)远高于 CPU 核数 × 1000,关注线程数或锁竞争
CPU 优化:减少无效开销
高 CPU 使用率不等于要升级 CPU,常是低效代码或配置导致。比如默认 systemd 启动大量无关服务,Python 应用未用协程却开数百线程,Java 应用堆大小不合理引发频繁 GC。
- 禁用不用的服务:systemctl disable --now bluetooth.service avahi-daemon.service
- 限制进程 CPU 亲和性:taskset -c 0-3 ./app 避免跨 NUMA 节点访问内存
- 对短时高负载任务,用 cpulimit -l 80 ./heavy_job 控制上限,防拖垮系统
内存与 I/O 协同调优
内存不是越多越好,关键是让数据更靠近 CPU。Linux 的 page cache 机制很高效,但若应用自己做缓存 + 再用 mmap,反而造成双重缓存浪费。
- 调整 vm.swappiness=1(非 0),避免空闲内存过早被 swap
- 对 SSD 存储,设 echo deadline > /sys/block/nvme0n1/queue/scheduler(比 cfq 更稳)
- 用 ionice -c 2 -n 7 降低后台批处理的 I/O 优先级,保前台响应
网络栈精简与复用
默认 TCP 参数适合通用场景,高并发短连接或长连接服务需针对性调整。TIME_WAIT 太多?不是要关 tcp_tw_reuse,而是先确认是否客户端没正确关闭连接。
- 增大连接跟踪表:net.netfilter.nf_conntrack_max = 655360
- 加速 TIME_WAIT 回收:net.ipv4.tcp_fin_timeout = 30 + net.ipv4.tcp_tw_reuse = 1
- 关闭无用功能减中断:ethtool -K eth0 gro off lro off(尤其虚拟化环境)
基本上就这些。优化不是一锤子买卖,上线后盯紧监控曲线,一次只改一项,有对比才有结论。











