Linux 排查:先观察资源,再验证瓶颈
本页目录
服务变慢时,最容易做的事是打开 top,然后被某个显眼的数字吸引。真正的排查应先确定症状,再把应用表现和系统资源放在同一个时间窗口比较。
本文合并重写自《Linux 常用操作指南》和《Linux 服务器检查指南》,保留观察方法,去掉旧 JVM 配置和固定阈值。命令以 Linux 常见工具为例;有些需要另行安装或相应权限。
先定义慢在哪里
记录开始时间、受影响请求、延迟分布、错误比例和近期变更。平均延迟相同,不代表尾部请求相同;没有错误,也不代表用户没有等待。
Google SRE 用延迟、流量、错误和饱和度概括服务监控的主要方向。这里借用它作为观察入口,而不是把主机 CPU 当成服务质量的全部。监控分布式系统
从整体状态缩小范围
uptime
free -h
df -h
df -i
vmstat 1 5
uptime 的 load average 不是 CPU 使用率。在 Linux 中,它包括可运行任务和不可中断睡眠任务的负载情况,需要结合 CPU 数量与 I/O 等待分析,不能套用“超过 0.7 就危险”的统一阈值。见 proc_loadavg(5)。
free 中的空闲内存少,也不自动意味着内存不足。关注 available、交换活动和应用表现;swap 已使用不等于正在频繁换入换出。vmstat 的首行通常反映自启动以来的统计,后续行才对应采样间隔。内存字段见 free(1)。
df -h 检查容量,df -i 检查 inode。大量小文件可能在容量耗尽前用完 inode。
再定位到进程与设备
ps -eo pid,ppid,comm,%cpu,%mem --sort=-%cpu
ss -lnt
前者是进程快照,后者显示监听中的 TCP 套接字。它们用于提出下一步假设,不能单独证明根因。进程 CPU 高,要继续判断是否有有效工作;CPU 低但请求慢,可能在等待数据库、网络或锁。
需要进一步观察磁盘时可以使用 iostat,检查日志时可以使用系统服务日志或应用日志。不要一次改多个参数,否则即使恢复,也很难知道是哪项变化起了作用。
文件操作也要理解单位与边界
GNU 工具中可以用下面的命令查看当前目录下的占用:
du -h --max-depth=1 . | sort -h
find ./logs -type f -mtime +7 -print
人类可读的 1G、900M 应使用支持单位的 sort -h,不能简单按数字排序。find 的时间条件按整段时间计算,不等于自然日;先打印匹配结果,核对路径和范围,再另行决定是否删除。
打包与压缩也不是一回事:tar -cf archive.tar notes/ 只归档,tar -czf archive.tar.gz notes/ 额外使用 gzip。提取前可用 tar -tf archive.tar 查看成员,避免不了解内容就直接覆盖现有目录。
为每个假设安排一个检查
假设磁盘写入是瓶颈,就观察相同时段的写入延迟、队列和应用等待;假设某次发布造成回退,就比较版本、请求和数据规模。每项观察都应能支持或削弱某个判断。
恢复服务与找到根因可以分开推进,但恢复动作也要记录。重启解决了眼前问题,并不说明问题已经消失;它可能只是清空了积累的状态。
排查记录最后应留下现象、证据、采取的动作和验证结果。下次遇到类似问题时,这些内容比一张脱离上下文的命令清单更有用。
相关文章
- Linux 概念指南2016-12-03
- Linux 实战:归档、磁盘与文本命令2016-09-28
- Linux 服务器检查指南2016-09-28
- Shell 入门指南2016-08-02