linux性能优化 需先定位瓶颈再调优,分四步:明确问题类型(CPU/ 内存 / 磁盘 / 网络)、用 top/iostat/vmstat/netstat 快速圈定范围、分层验证排除误判、所有调优须可测可回滚。

Linux 性能优化没有万能公式,但有一套通用排查逻辑——先定位瓶颈,再针对性调优,避免盲目修改配置。
一、明确当前性能问题类型
性能问题本质分四类:CPU 忙、内存紧、磁盘慢、网络卡。第一步不是看 top,而是问清楚“什么变慢了”——是服务响应延迟升高?批量任务耗时翻倍?还是系统整体卡顿?不同现象指向不同方向。
例如:
• 用户说“网页打开要 5 秒”→ 优先查 Web 服务进程、网络延迟、磁盘 I /O(如日志写满或 SSD 老化);
• 运维发现 load average 长期>CPU 核数 → 聚焦 CPU 使用率、上下文切换、不可中断睡眠(D 状态)进程;
• 应用频繁 OOM 被 kill → 直接检查内存分配、swap 使用、cgroup 限制。
二、用基础命令快速圈定瓶颈范围
不用装 工具,系统自带命令组合就能覆盖 90% 场景:
- top / htop:看 CPU 占用 TOP 进程、load average、内存剩余、swap 使用;按 1 显示各核负载,按 M 按内存排序,按 P 按 CPU 排序;
- iostat -x 1:重点关注%util(接近 100% 说明磁盘饱和)、await(单次 I / O 平均等待毫秒,>10ms 需警惕)、r/s w/s(读写频次是否异常);
- vmstat 1:观察si/so(swap 换入换出,非零即内存压力)、cs(上下文切换次数,突增可能由频繁进程唤醒或锁竞争引起)、in(中断次数);
- netstat -s 或 ss -s:查丢包、重传、连接队列溢出(如 ”listen overflows”),定位网络层瓶颈。
三、分层验证,排除干扰项
很多“性能差”实际是误判。比如:
- 应用日志里报“timeout”,未必是系统慢——可能是下游 API 超时,或 dns 解析失败(用 dig +trace 验证);
- top 显示某进程 CPU 99%,但它本就是计算密集型任务(如 ffmpeg 转码),属正常行为;
- df 显示根分区 95% 满,但 /proc /sys 等虚拟文件系统不占真实磁盘空间,真正要看 df -i(inode 是否耗尽)和 du -sh /* 2>/dev/NULL | sort -hr | head -5 找真实大目录。
四、调优动作必须可测量、可回滚
所有修改前记录基线(如 ab -n 1000 -c 100 http://test/ 压测结果),每次只改一项,改完立刻验证效果。常见安全调优点:
- CPU:调整进程调度策略(chrt)、关闭非必要服务(systemctl disable bluetooth);
- 内存:合理设置vm.swappiness(SSD 建议 1~10,HDD 可设 30)、禁用 transparent hugepage(echo never > /sys/kernel/mm/transparent_hugepage/enabled);
- 磁盘:IO 调度器选deadline(HDD)或none(NVMe),挂载加noatime,nodiratime;
- 网络:增大连接队列(net.core.somaxconn=65535)、开启 TCP 快速回收(net.ipv4.tcp_tw_reuse=1,仅适用于 NAT 环境)。
基本上就这些。流程不复杂,但容易忽略“问题定义”和“验证闭环”。与其背调优参数,不如练熟 top/iostat/vmstat 的解读逻辑——系统不会撒谎,只是需要你问对问题。