导语:Linux 性能问题往往不是“机器太慢”这么简单,而是 CPU、内存、磁盘 I/O、网络、进程调度等多个因素共同作用的结果。对新手来说,掌握一套轻量、可复用的监控思路,比记住一堆命令更重要。🛠️
一、先建立性能监控的基本思路
做 Linux 系统性能监控,建议先回答三个问题:现在是否异常、瓶颈在哪里、变化从什么时候开始。不要一上来就重启服务,也不要只盯着 CPU 使用率。一次有效排查通常要同时观察负载、CPU、内存、磁盘 I/O、网络连接和关键进程。
Linux 的很多监控工具并不是“越高级越好”。top、free、vmstat、iostat、ss、journalctl 这些基础命令,已经能覆盖大多数日常排查场景。例如 vmstat 可报告进程、内存、分页、块 I/O、陷入、磁盘和 CPU 活动,适合作为快速判断系统整体状态的入口 vmstat 手册。
二、CPU:不要只看使用率
很多人看到 CPU 使用率 90% 就紧张,但高使用率不一定代表故障。如果机器正在执行计算任务,高 CPU 可能是正常现象。更值得关注的是负载是否长期高于 CPU 核心数、运行队列是否积压、用户态和内核态耗时是否异常。
- top 或 htop:观察 load average、%us、%sy、%id、%wa,以及哪个进程最耗 CPU。
- uptime:快速查看 1 分钟、5 分钟、15 分钟平均负载,判断问题是突发还是持续。
- mpstat -P ALL 1:查看每个 CPU 核心的使用情况,适合发现单核打满的问题。
如果 top 只能告诉你“哪个进程忙”,perf 可以进一步告诉你“哪些函数忙”。perf 是 Linux 的性能分析工具,覆盖硬件级计数器、软件计数器和 tracepoint 等场景 perf 手册。在需要分析热点函数时,可尝试 perf top;它会实时显示性能计数器画像 perf-top 手册。
三、内存:free 少不一定是坏事
Linux 会把空闲内存用于缓存,以提升文件读写效率,所以看到 free 很低不一定代表内存不足。排查时更应该关注 available、swap 使用情况、是否频繁换入换出,以及是否存在单个进程持续增长的内存占用。
- free -h:优先看 available,而不是只看 free。
- vmstat 1:关注 si、so 字段。如果 swap in 和 swap out 长期不为 0,说明系统可能正在承受内存压力。
- ps aux --sort=-%mem:按内存占用排序,定位可疑进程。
实用技巧是:不要只截取某一秒的数据。内存问题常常是“慢慢涨上去”的,例如缓存未释放、连接未关闭、任务队列堆积等。建议连续观察几分钟,必要时配合应用日志确认是否存在请求量变化或异常任务。
四、磁盘 I/O:CPU 空闲也可能很卡
有些服务器 CPU 看起来很空闲,但应用响应依然很慢,这时要重点怀疑磁盘 I/O。典型表现包括进程处于 D 状态、top 中 wa 较高、数据库查询变慢、日志写入阻塞等。
- iostat -x 1:查看设备级 I/O 指标,重点关注 await、r/s、w/s、%util 等。
- iotop:查看哪个进程正在大量读写磁盘。
- df -h 与 df -i:分别检查磁盘空间和 inode 是否耗尽。
磁盘排查要结合业务场景判断。例如日志量突增、备份任务、数据库慢查询、大文件压缩,都可能造成 I/O 抖动。不要只看磁盘剩余空间,inode 用尽同样会导致无法创建新文件。
五、网络:连接数和错误同样重要
网络问题不一定表现为“断网”。连接数过高、端口耗尽、DNS 慢、丢包、重传、监听服务异常,都会让应用看起来像“性能差”。排查网络时,应从本机监听、连接状态、路由和基础连通性逐步看起。
- ss -tunlp:查看监听端口和对应进程。
- ss -s:快速查看 TCP 连接概要。
- ping、traceroute、mtr:用于判断链路延迟和路径问题。
- sar -n DEV 1:观察网卡收发速率和包量变化。
如果是 Web 服务,还可以关注 TIME_WAIT、ESTAB 数量是否异常。连接数突然升高不一定是攻击,也可能是上游超时、连接池配置不合理、后端响应变慢导致请求堆积。
六、日志和时间线:让排查有证据
性能监控不能只看实时指标,还要回到时间线。一次故障排查建议记录:问题开始时间、影响范围、当时负载、关键进程、日志异常、最近变更。systemd 系统可使用 journalctl 查看服务和系统日志,例如 journalctl -u 服务名 --since "1 hour ago"。
一个很实用的习惯是,把“监控指标”和“变更记录”放在一起看。发布新版本、调整数据库参数、变更定时任务、扩容或迁移,都可能是性能变化的触发点。没有时间线,排查很容易陷入猜测。
七、入门级排查流程推荐
- 先看整体:uptime、top,判断负载、CPU、内存是否明显异常。
- 再看资源:free -h、vmstat 1、iostat -x 1、ss -s,分别确认内存、I/O、网络状态。
- 定位进程:用 ps、top、iotop 找到最可疑的进程。
- 结合日志:用 journalctl、应用日志、数据库日志还原问题发生前后的变化。
- 小步验证:一次只调整一个因素,避免多个改动混在一起无法判断效果。
经验提示:性能优化不是追求某个指标“越低越好”,而是让系统在业务高峰下仍然稳定、可预测、可恢复。📈
总结
Linux 系统性能监控的核心,是用正确的顺序缩小问题范围:先看整体,再看 CPU、内存、磁盘、网络,最后结合进程和日志定位原因。新手不必一开始就搭建复杂平台,先熟练掌握 top、free、vmstat、iostat、ss、journalctl、perf 等工具,就能解决大量日常问题。真正可靠的排查,来自连续观察、交叉验证和明确记录,而不是凭感觉判断。🚀