linux性能优化 需先定位瓶颈再干预,遵循“不测量不优化、不验证不上线”原则;通过 top、free、iostat、netstat 等命令快速诊断 CPU、内存、I/O、网络问题,分层优化并固化配置,辅以长期监控与基线建设。

Linux 性能优化没有万能公式,但有一套通用排查逻辑——先定位瓶颈,再针对性干预,避免盲目调参。核心原则是:不测量就不优化,不验证就不上线。
一、快速定位 性能瓶颈
用最简命令组合判断系统当前压力来源:
- top / htop:看 CPU 整体负载(load average)、占用最高的进程、%us/%sy/%wa 占比——若 %wa 高说明 I / O 等待严重;%sy 持续超 30% 可能内核态开销异常
- free -h:关注 available 值,而非 free;若 available 接近 0 且 swap in/out 频繁(si/so 非零),内存已实质不足
- iostat -x 1:重点看 %util(设备饱和度)、await(I/ O 响应延迟)、r_await/w_await 分离读写瓶颈;%util 达 100% 但 await 很低,可能是队列 堆积而非磁盘慢
- netstat -s | grep -i “retransmit|drop” 或 ss -i:确认网络层是否存在重传、丢包或接收队列溢出(rx_queue > 0)
二、分层收敛优化方向
根据定位结果,按资源层级逐层处理:
- CPU 瓶颈 :检查是否单进程占满核心(用taskset 绑核或 nice 降优先级);确认是否有大量短生命周期进程(pidstat -w 1看 cswch/s);关闭非必要服务(systemctl list-units –type=service –state=running)
- 内存瓶颈 :清理 page cache(echo 3 > /proc/sys/vm/drop_caches 仅临时有效);调整 swappiness(vm.swappiness=10降低交换倾向);检查大页使用(cat /proc/meminfo | grep -i huge)
- I/ O 瓶颈 :SSD 启用 noop 或 kyber 调度器(echo kyber > /sys/block/nvme0n1/queue/scheduler);HDD 用 deadline;禁用 atime 更新(mount -o remount,noatime);日志类应用改用 异步 写或缓冲区加大
- 网络瓶颈 :增大 socket 缓冲区(net.core.rmem_max、net.core.wmem_max);开启 TSO/GSO 卸载(ethtool -K eth0 tso on);TIME_WAIT 过多时调整net.ipv4.tcp_fin_timeout 和net.ipv4.ip_local_port_range
三、关键配置的验证与固化
所有修改必须可验证、可回滚:
- 用 stress-ng 或fio复现原问题场景,对比优化前后指标(如响应时间 P95、吞吐量 QPS、错误率)
- 临时生效命令(如 sysctl -w)需同步写入 /etc/sysctl.conf 并执行 sysctl -p 固化
- 内核参数修改后建议重启验证稳定性;服务级优化(如 jvm 堆大小、nginx worker_connections)需配合应用日志分析效果
- 记录每次变更的日期、参数、预期效果、实测数据,形成运维基线
四、长期监控与基线建设
避免问题复发的关键是建立常态感知能力:
- 部署轻量采集(collectd或telegraf),至少覆盖 CPU、内存、磁盘 IOPS/latency、网络错包率、进程数、打开文件数
- 为每个服务定义 SLI(如 API 平均延迟
- 每月比对历史同周期指标(如每周三上午 10 点负载),识别缓慢劣化趋势(如内存泄漏、连接池未释放)
- 保留最近 3 次内核升级、关键软件更新前后的性能快照,用于回归分析
基本上就这些。流程本身不复杂,但容易忽略的是:把“看到指标异常”当成终点,而没追问“为什么这个指标会这样”。真正的优化,始于问题归因,成于闭环验证。