解决高负载问题
- 当处理一个运行缓慢系统的时候,首先要观察的度量指标之一就是I/O等待时间,它可以用来排除磁盘I/O的问题。
- 如果I/O等待时间很低,那么可以看看CPU空闲时间百分比;
- 如果I/O等待时间很高,那么下一步就是确定是什么因素导致I/O等待时间所占的比重这么高;
- 如果I/O等待和CPU空闲时间百分比都很低,那么很可能会看到一个非常高的用户时间百分比,所以你必须确定是什么原因导致了这么高的用户时间百分比;
- 如果I/O等待时间所占百分比很低,而空闲时间百分比很高,那么你就知道系统运行缓慢不是CPU资源的原因,而应该从别的地方找原因。这可能意味这应该查看网络问题或者Web服务器的问题,或者查看Mysql查询缓慢的问题等。
解决高I/O等待时间问题
当你看到I/O等待时间所占CPU时间的比重很高的时候,首先需要检查的就是机器是否正在大量使用交换空间。因为硬盘操作的速度远远低于RAM,所以当系统内存耗尽,开始使用交换空间的时候,系统的性能会受到严重影响。任何想要访问硬盘的操作都要完成与硬盘的I/O交换。所以,故障排除的第一步是看内存是否耗尽,如果是,先解决这个问题。如果还有大量可用的RAM,你需要明确哪个进程占用了大部分I/O操作。
- 使用iostat命令
[yangshuai@iZbp1fbha9mr8g8k7c5mk9Z ~]$ iostat
Linux 2.6.32-642.13.1.el6.x86_64 (iZbp1fbha9mr8g8k7c5mk9Z) 11/14/2018 x86_64 (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
22.47 0.00 4.39 0.38 0.00 72.76
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 3.46 1.42 67.43 8039258 382790208
vdb 1.03 2.40 58.00 13636250 329293080
tps:
这个值列出了设备每秒的传输量。“传输”是向设备发送I/O请求的另一种表达方式。
Blk_read/s
表示每秒从设备读取的数据量
Blk_wrtn/s
表示每秒向设备写入的数据量
Blk_read
这一列表示从设备读取的数据总量
Blk_wrtn
这一列表示写入设备的数据总量
- iotop
Total DISK READ: 55.90 K/s | Total DISK WRITE: 271.51 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
536 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [jbd2/vda1-8]
第一行:READ和WRITE速率总计;
第二行:
tid:线程id,按p可转换进程pid
PRIO:优先级
DISK READ:磁盘读取速率
DISK WRITE:磁盘写取速率
SWAPIN:swap交换百分比
IO>:IO等待所占用百分比
COMMAND:线程/进程详细信息