从前遇到系统卡顿只会top。。top看不出来怎么搞呢?
Linux系统提供了丰富的命令行工具,以帮助用户和系统管理员监控和分析系统性能。在这些工具中,uptime、mpstat和pidstat是非常有用的命令,它们可以帮助你理解系统的平均负载以及资源使用情况。
uptime命令
uptime命令用于显示系统运行的时间、用户数量以及平均负载。平均负载是指在特定时间间隔内,系统处于运行状态和不可中断状态的平均进程数。这个数字给出了系统工作负载的一个概览。
使用uptime命令
root@gl:/home/gl# uptime08:58:38 up 4:17, 4 users, load average: 0.97, 1.00, 0.86
这里的08:58:38是当前时间,up 4:17 表示系统已经运行了4小时17分钟,4 users表示有4个用户登录系统,load average: 0.97, 1.00, 0.86分别表示过去1分钟、5分钟和15分钟的平均负载。
mpstat命令
mpstat命令用于报告CPU的统计信息。它可以显示每个可用CPU的性能统计,帮助你分析CPU的使用情况。
使用mpstat命令
Linux 4.15.0-213-generic (gl) 01/16/2024 _x86_64_ (2 CPU)08:58:13 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
08:58:14 AM all 0.00 0.00 8.75 25.62 0.00 3.12 0.00 0.00 0.00 62.50
08:58:14 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
08:58:14 AM 1 0.00 0.00 23.33 68.33 0.00 8.33 0.00 0.00 0.00 0.00
可以看出,系统中有两个cpu,1号cpu(%iowait)68%,说明存在大量的IO操作。
pidstat命令
pidstat用于监控各个进程的资源使用情况,包括CPU、内存、磁盘I/O等。
使用pidstat命令
root@gl:/home/gl# pidstat -u 1
Linux 4.15.0-213-generic (gl) 01/16/2024 _x86_64_ (2 CPU)08:58:34 AM UID PID %usr %system %guest %wait %CPU CPU Command
08:58:35 AM 0 220 0.00 8.91 0.00 0.00 8.91 1 kworker/1:1H
08:58:35 AM 0 18799 0.00 8.91 0.00 8.91 8.91 1 stress
PID:进程ID。
%usr:用户态CPU时间百分比。
%system:内核态CPU时间百分比。
%guest:客户机操作系统占用的CPU时间百分比。
%wait:进程等待I/O操作完成所占用的CPU时间百分比。
%CPU:总的CPU使用率百分比。
CPU:进程所在的CPU编号。
Command:进程的命令名。
从pidstat的结果可以看出名为stress的这个进程是触发iowait较高的罪魁祸首。
ps命令
root@gl:/home/gl# ps aux | grep stress
root 18798 0.0 0.0 3704 1372 pts/0 S+ 08:57 0:00 stress -i 1 --timeout 600
root 18799 11.3 0.0 3704 108 pts/0 D+ 08:57 0:38 stress -i 1 --timeout 600
通过ps命令先拿到stress的pid,如上有两个。
strace命令
依次用strace查看进程正在执行的系统调用,发现在不停的执行sync(刷新缓存到磁盘)操作,所以合理怀疑可能是stress进程中写完文件刷新时存在死循环。下一步就可以考虑对比log分析对应部分的代码了。
root@gl:/home/gl# strace -p 18799
strace: Process 18799 attached
sync() = 0
sync() = 0
sync() = 0
sync() = 0
sync() = 0
...
分析平均负载
通过uptime命令提供的平均负载信息,我们可以得到系统整体的负载情况。如果平均负载数值超过了CPU核心数,这可能意味着系统过载。
使用mpstat,我们可以深入了解每个CPU核心的使用情况,从而判断是否有核心过载或者空闲。pidstat则提供了进程级别的资源使用情况,帮助我们找出是哪些进程导致了高负载。更近一步的,可以使用strace命令查看查看指定进程在进行哪些系统调用
所以结合mpstat、pidstat、ps、strace这些工具,我们可以全面分析系统的性能瓶颈,并采取相应的优化措施,从此再也不用慌了~