当看到I/O等待时间所占CPU时间的比重很高的时候,首先要检查的就是机器是否正在大量使用交换空间,因为硬盘操作的速度远远低于RAM,所以当系统内存耗尽,开始使用交换空间的时候,系统的性能会受到严重影响。任何想要访问硬盘的操作都要完成与硬盘的I/O交换。所以,故障排除的第一步是看内存是否耗尽,如果是,先解决这个问题。如果还有大量可用的RAM,你需要明确那个进程占用了大部分I/O操作。
在你很难弄明白到底是哪个进程占用了大量I/O资源,使用iostat可以找到是哪个分区执行大量I/O操作。
iostat的使用
最上面显示的是1个cpu,64位系统,linux内核版本
avg-cpu段:
%user: 在用户级别运行所使用的CPU的百分比
%nice: nice操作所使用的CPU的百分比
%system: 在系统级别(kernel)运行所使用CPU的百分比
%iowait: CPU等待硬件I/O时,所占用CPU百分比
%idle: CPU空闲时间的百分比
Device段:
sda:设备名
tps: 每秒钟发送到的I/O请求数.
Blk_read /s: 每秒读取的数据量
Blk_wrtn/s: 每秒写入的数据量.
Blk_read: 读入的总的数据量
Blk_wrtn: 写入的总的数据量
iostat各个参数说明:
-c 仅显示CPU统计信息.与-d选项互斥.
-d 仅显示磁盘统计信息.与-c选项互斥.
-k 以K为单位显示每秒的磁盘请求数,默认单位块.
-p device | ALL
与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如:
# iostat -p hda
或显示所有设备
# iostat -p ALL
-t 在输出数据时,打印搜集数据的时间.
-V 打印版本号和帮助信息.
-x 输出扩展信息.
iostat后加一个数字
iostat 4 表示每隔4秒就刷新一次
iotop的使用
--version 显示版本号然后退出
-h, --help 显示帮助然后退出
-o, --only 只显示正在产生I/O的进程或线程。除了传参,可以在运行过程中按o生效。
-b, --batch 非交互模式,一般用来记录日志
-n NUM, --iter=NUM 设置监测的次数,默认无限。在非交互模式下很有用
-d SEC, --delay=SEC 设置每次监测的间隔,默认1秒,接受非整形数据例如1.1
-p PID, --pid=PID 指定监测的进程/线程
-u USER, --user=USER 指定监测某个用户产生的I/O
-P, --processes 仅显示进程,默认iotop显示所有线程
-a, --accumulated 显示累积的I/O,而不是带宽
-k, --kilobytes 使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用。
-t, --time 加上时间戳,非交互非模式。
-q, --quiet 禁止头几行,非交互模式。有三种指定方式。
-q 只在第一次监测时显示列名
-qq 永远不显示列名。
-qqq 永远不显示I/O汇总。
查看系统的I/O使用iostat命令而使用iotop可以根据I/O统计信息排序,追踪到具体的进程,布布扣,bubuko.com