运维工程师必备:Linux系统监控与故障排查的命令大全
运维工程师日常工作中,最核心的职责之一就是保障业务系统的稳定运行。当系统出现响应缓慢、服务不可用或资源异常时,快速定位问题并解决是衡量运维能力的重要标准。Linux系统提供了众多强大的命令行工具,帮助我们从CPU、内存、磁盘、网络等多个维度进行系统监控与故障排查。本文将全面梳理运维工程师必备的Linux监控与排查命令。
一、 CPU监控与排查
CPU是系统的核心资源,当出现系统负载过高或响应卡顿时,首先需要排查CPU的使用情况。
1. top 命令
top 是Linux下最常用的实时系统监控工具,它可以显示系统整体的负载以及各个进程的资源占用状况。
top - 14:30:20 up 10 days, 3:15, 2 users, load average: 0.05, 0.02, 0.00 Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.3 us, 1.0 sy, 0.0 ni, 96.5 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st MiB Mem : 7982.2 total, 356.8 free, 2145.2 used, 5480.2 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 5432.8 avail Mem
重点关注 load average(系统负载均值)和 %Cpu(s) 中的 us(用户态占用)、sy(内核态占用)以及 wa(等待IO占用)。如果 wa 长期过高,说明磁盘IO是瓶颈。
2. mpstat 命令
mpstat 属于 sysstat 工具包,用于查看多核CPU的详细性能指标,能够按核心展示空闲率、中断率等。
mpstat -P ALL 1 3
该命令会每隔1秒输出一次所有CPU核心的统计信息,共输出3次,有助于发现单核过载的问题。
3. uptime 命令
快速查看系统运行时间及整体负载情况。
uptime 14:30:20 up 10 days, 3:15, 2 users, load average: 0.05, 0.02, 0.00
二、 内存监控与排查
内存泄漏或不足会导致OOM(Out of Memory),进而使进程被系统强制杀死。
1. free 命令
free 用于查看系统物理内存和交换分区的使用情况。建议使用 -h 参数以便于阅读。
free -h total used free shared buff/cache available Mem: 7.8Gi 2.1Gi 356Mi 156Mi 5.5Gi 5.3Gi Swap: 2.0Gi 0B 2.0Gi
需要特别注意 available 列,它表示系统当前真正可用于启动新应用的内存大小,包含 buff/cache 中可随时释放的部分。
2. vmstat 命令
vmstat 可以全方位监控系统的虚拟内存、进程、块设备读写和CPU活动。
vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 356844 108544 5480200 0 0 2 10 10 15 2 1 96 0 0
重点关注 si(从交换分区写入内存)和 so(从内存写入交换分区),如果这两个值频繁变化,说明物理内存不足,系统正在频繁换页。
三、 磁盘I/O监控与排查
磁盘I/O往往是系统性能的最大瓶颈,尤其是使用机械硬盘或数据库服务的场景。
1. iostat 命令
iostat 同样属于 sysstat 包,用于监控系统的块设备I/O统计信息。
iostat -x 1 3
加上 -x 参数可以显示扩展统计信息。重点看 %util(设备利用率)和 await(平均I/O等待时间)。如果 %util 接近100%,或者 await 远大于预期,说明磁盘I/O存在严重瓶颈。
2. iotop 命令
类似于 top,但 iotop 是专门用来监控磁盘I/O使用状况的,能够直观地看到哪个进程在进行大量的磁盘读写。
iotop -oP
-o 参数表示只显示有I/O操作的进程,-P 表示显示进程而非线程。
3. df 和 du 命令
df 用于查看文件系统的整体磁盘空间使用情况,du 用于查看目录或文件占用的空间大小。
df -h du -sh /var/log/*
四、 网络监控与排查
网络故障是导致服务不可用的常见原因,排查网络连通性、连接状态和抓包分析是运维必备技能。
1. ss 命令
ss 是新一代的网络套接字统计工具,比传统的 netstat 速度更快,尤其是在连接数巨大的服务器上。
ss -tulnp
参数说明:-t 显示TCP,-u 显示UDP,-l 显示监听状态,-n 不解析服务名,-p 显示进程信息。
2. tcpdump 命令
当需要深入分析网络数据包时,tcpdump 是首选的抓包工具。
tcpdump -i eth0 -nn port 80 -c 100
该命令表示在 eth0 网卡上抓取端口为80的100个数据包,且不进行主机名和端口名解析。
3. curl 命令
用于测试Web服务的可用性和接口响应。例如,测试某API接口的HTTP响应头:
curl -I https://www.ipipp.com
如果业务日志中出现类似带有HTML结构的错误提示,比如包含 <html> 或 <error> 标签的响应,可以通过 curl 获取完整的响应体进行进一步分析。
五、 进程与系统综合排查
在定位到具体进程后,还需要对进程的底层行为进行分析。
1. ps 命令
用于查看当前系统的进程状态快照。
ps aux | grep nginx ps -ef | grep java
2. strace 命令
strace 用于追踪进程的系统调用和接收到的信号,是排查进程卡死或异常退出的终极武器。
strace -p <PID>
将 <PID> 替换为需要追踪的进程号。如果进程挂在某个系统调用上迟迟不返回,问题往往就在那里。
3. dmesg 命令
当怀疑系统出现硬件故障或内核层面的异常(如OOM Killer杀死进程、网卡丢包)时,可以通过 dmesg 查看内核环形缓冲区的日志。
dmesg -T | grep -i error dmesg -T | grep -i oom
熟练掌握以上命令,不仅能帮助运维工程师在日常工作中实现高效的系统监控,更能在故障发生时做到心中有数、手中有器,快速定位并恢复服务。真正的排查能力在于将这些工具组合使用,结合系统原理与应用日志,形成一套完整的排障逻辑。