Linux程序卡顿,记一次Linux系统卡顿的排查过程

本文详细介绍了如何诊断Linux服务器系统负载过高的问题,通过w和top命令观察CPU活动进程数和I/O等待情况,再利用iostat定位到问题磁盘vda。接着,通过iotop或ps命令找出引发高I/O的进程,并通过/proc目录进一步确认。最终,发现进程号123424可能是罪魁祸首,其已大量读写硬盘。
摘要由CSDN通过智能技术生成

1.使用w命令查看系统负载,发现系统负载很高:(该服务器只有一个CPU,load average值的意义是单位时间段内CPU活动进程数,这个值越大就说明服务器压力越大,一般情况下这个值只要不超过服务器的cpu数量就没有关系)

d268048ca936ad34567caadfe017940d.png

2.使用top命令进一步确认具体是原因导致的负载过高,执行top命令后,发现CPU这一列wa的数值很高,说明CPU资源在等待I/O,由此可以判断是因为I/O的原因导致了系统负载过高,操作卡顿。

41355a52ced2ffa6ac6a6f2a90f5fd35.png

top命令从系统面大体展示了I/O Wait,但无法确定具体是哪个磁盘正在被影响;因此需要使用iostat命令进行确认

3.使用iostate命令确认具体是那个磁盘存在I/O异常,

iostate -x 2 5  # 每2秒打印报告,共打印5次;-x参数告诉iostata打印出更详尽的报告

93c63a5d8d693444f6ea474731bcc93b.png

iostat打印出的第1个报告,数值是基于最后一次系统启动的时间统计的,即每个子报告都是基于上1次的报告,因此第一个报告应该被忽略。在这个例子中,第2份报告就是从第1份报告开始后的硬盘数据,第3份报告基于第2份,依此类推。根据第2个报告的输出可以看到,vda盘的%util数值达到了103.63%,这表示引起I/O慢的进程在写入vda盘。

4.使用iotop或者ps查找导致高I/O的进程:

查看哪个进程使用硬盘最多的最简单的方法就是使用iotop命令,虽然iotop好用,但默认主流的linux发行版中是没有安装的,可以使用yum provides */iotop 查看iotop命令是由那个rpm包提供的,使用yum安装下即可。如果无法在短时间内完成iotop的安装,还可以使用ps命令来大致确定具体是那个进程导致的I/O过高。

ps命令能打印出内存,cpu的情况但没办法打印出硬盘I/O的情况。虽然ps没办法打印出I/O的情况,但可以显示出进程是否在等待I/O。等待I/O的进程通常处于uninterruptible、sleep或D状态,通过这些信息可以大致查找出处在wait状态的进程。

for x in `seq 1 10`;do ps -eo state,pid,cmd|grep "^D";echo "---";sleep 5;done

8d7cd6b200739cde98d7042884212719.png根据命令的打印结果可以看出,进程号为123424的进程每次都会出现,说明很有可能是该进程导致的I/O过高

为了进一步确认是否是该进程导致的I/O过高,可以在/proc中找到该进程,查看它的I/O

976eca0e54c0db561124a78a646702fa.png

read_bytes和write_bytes就这个进程读写硬盘的字节数。可以看到123424这个进程已经读了2GB,写了235MB的数据。

接下来的操作,可以使用kill命令杀掉导致I/O飙高的进程(临时)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值