Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3785742
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2020-11-17 15:48:22


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

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

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

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

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

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

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

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

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

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

阅读(1817) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~