Linux监控磁盘IO及线程读写状态 并用日志记录

最近给客户交付新系统,然后客户反应服务器硬盘使用的增量有点异常,5天用掉了3个G,由于我们做的是一个采集系统,服务器每隔几分钟就会接收上千台终端的数据,但是以前没有遇到过增值量那么大的情况。简单检查了一下数据库,发现数据量增长没有异常。于是挨个检查是不是有服务拼命的输出日志,也没有异常。最后打算监控到底是哪个进程在进行大量的IO操作,决定把这个过程中用到的一些指令记录下来。

查看线程IO状态

pidstat -d 1

  • 1表示每隔1秒打印一次

控制台输出的结果:

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
Average:        0       406      0.00     17.00      0.00  jbd2/vda1-8
Average:        0       857      0.00      2.00      0.00  exe
Average:        0      4115      1.00      0.00      0.00  kworker/u8:0
Average:        0      4658    601.00      0.00      0.00  sshd
Average:        0      5155      0.00     44.00      0.00  java
Average:        0      6019      0.00     16.00      0.00  java
Average:        0      6569      0.00     18.00      0.00  java
Average:        0      8958      0.00     20.00      0.00  java
Average:        0     11407     35.00     18.00      0.00  java
Average:        0     15302      0.00     16.00      0.00  java
Average:        0     15771     13.00     19.00      0.00  java
Average:        0     17422     20.00     21.00      0.00  java
Average:        0     20389      0.00     18.00      0.00  java
Average:        0     20713      1.00     18.00      0.00  java
Average:        0     20785     12.00     20.00      0.00  java
Average:        0     23573      7.00     20.00      0.00  java
Average:        0     25532   1301.00      0.00      0.00  AliYunDun
Average:        0     27592      0.00      1.00      0.00  pidstat
Average:        0     28715      0.00     29.00      0.00  java

但是我需要记录一段时间的信息,不可能一直在控制台打印,于是使用重定向来将控制台信息打印到文件中:
1> yourfile.log "1>"代表重定向,后面跟你需要记录的文件名(没有则会自动创建),会覆盖原有文件的内容。
1>> yourfile.log 与上面的用法一样,但是是在文件末尾进行追加,不会覆盖原有文件的内容。

查看磁盘IO情况

iostat -x -k -d 1 同样1代表时间间隔,单位是秒。
输出:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00  143.00     0.00   584.00     8.17     0.10    0.69    0.00    0.69   0.16   2.30
vdb               4.00     0.00   15.00   14.00    76.00    68.00     9.93     0.01    0.45    0.60    0.29   0.31   0.90

完整的shell脚本:

#!/bin/sh
CURRENT_DIR=`pwd`

PIDFILE="$CURRENT_DIR/disk.pid"

iostat -x -k -d 1 1>> io-disk.log &
pidstat -d 1 1>> io-thread.log &

pid=$!
echo $pid > $PIDFILE
echo 'io-logs started !'

运行此脚本后过一段时间分析io-disk.logio-thread.log就可以了。

### 回答1: 当Linux磁盘IO使用率过高时,需要采取以下措施进行处理: 1. 检查磁盘IO性能:使用命令"iostat"或"iotop"来查看各个磁盘IO使用情况,确定是哪一个磁盘IO使用率过高。 2. 确定高IO进程:使用命令"pidstat" 或 "iotop"查找到占用磁盘IO最高的进程,并确认其是否为系统进程,或者可能是误操作引起的异常进程。 3. 优化高IO进程:对于占用IO高的进程,可以考虑进行优化操作,例如优化数据库、调整程序逻辑、增加缓存等,以降低其IO使用率。 4. 调整IO调度器:对于某些特定的磁盘IO问题,可以尝试调整IO调度器,如将默认的"cfq"调度器改为"deadline"或"Noop"调度器,通过更改调度算法来优化磁盘IO性能。 5. 添加缓存:使用缓存技术,如使用Redis或Memcached等内存数据库,将频繁访问的数据存储在内存中,减轻磁盘IO负担。 6. 增加磁盘吞吐量:如果磁盘负载过高,可以考虑增加磁盘吞吐量,如使用RAID技术或增加磁盘数量。 7. 优化文件系统:对于某些特定的文件系统,可以通过调整文件系统参数来优化磁盘IO性能,如调整磁盘超时时间、缓存大小等。 8. 检查磁盘是否故障:如果上述措施都没有明显效果,可以检查磁盘是否存在硬件故障,包括磁盘本身是否有错误或磁盘连接是否不稳定,必要时更换磁盘。 总之,处理Linux磁盘IO使用率过高需要综合考虑以上各个方面,根据具体情况进行相应的优化和调整,以降低IO使用率并提升系统性能。 ### 回答2: 当Linux磁盘IO使用率过高时,可以采取以下处理方法: 1. 分析原因:首先,需要通过系统监控工具(如top、iostat等)查看磁盘IO使用率过高的具体原因。可能的原因包括磁盘读写操作过多、磁盘故障、应用程序限制、系统配置不当等。 2. 优化磁盘IO:通过优化系统的文件系统,可以提高磁盘IO性能。可以考虑使用高性能的文件系统(如XFS、Btrfs)来替换默认的文件系统,或者进行磁盘分区以减少IO负载。此外,可以调整文件系统的挂载参数、提高磁盘缓存等方式来提升磁盘IO性能。 3. 优化应用程序:如果磁盘IO使用率过高是由于某些应用程序所引起的,可以对这些应用程序进行优化。例如,优化数据库的读写操作,使用缓存技术减少磁盘IO等。 4. 检查磁盘健康状态磁盘故障可能导致磁盘IO使用率过高。因此,需要定期检查磁盘的健康状态,并及时更换坏盘。 5. 调整系统配置:根据服务器的硬件和实际需求,适当调整系统的参数配置。例如,可以调整磁盘调度算法、调整内核参数等来优化磁盘IO性能。 6. 负载均衡:如果是多台服务器组成的集群环境,可以通过负载均衡的方式来分摊磁盘IO负载。将磁盘IO请求均匀分布到多个磁盘上,可以提高整个系统的磁盘IO性能。 总之,处理Linux磁盘IO使用率过高需要综合考虑软硬件环境,并通过优化系统配置、优化应用程序、检修磁盘等方式来提高磁盘IO性能。 ### 回答3: 当Linux磁盘IO使用率过高时,有几个常见原因和相应的处理方法。 首先,可能是由于过多的并发读写操作导致的磁盘IO使用率过高。可通过增加磁盘数量或者使用RAID等技术来提高磁盘吞吐量,分散读写负载。可以使用工具如iostat来监测磁盘IO使用情况并定位问题。 其次,可能是因为系统频繁进行磁盘同步操作导致的磁盘IO使用率过高。在Linux系统中,可以通过修改文件系统的挂载参数来调整同步策略,如在/etc/fstab文件中将sync参数改为async,或者使用noatime参数禁止更新最后访问时间。这些操作可以减少对磁盘的同步写操作,提高性能。 另外,可能是因为某些应用程序或进程不断进行大量的小文件读写操作导致的磁盘IO使用率过高。可以通过使用工具如iotop来查看系统中哪些进程消耗大量的IO资源,并找出造成问题的进程。然后可以调整相应的应用程序设置或者优化代码逻辑,减少其对磁盘读写负载。 此外,还可以通过调整系统内核参数来优化磁盘IO性能。例如,可以增加内核中针对磁盘IO操作的线程数量,修改相关的文件系统参数等。需要谨慎地调整这些参数,可以参考相关的文档或咨询专业人士。 总之,针对Linux磁盘IO使用率过高的问题,可以采取多种手段进行处理,包括优化应用程序设计、调整系统配置和内核参数等。根据具体的情况和需求,选择相应的方法进行优化,以提高磁盘IO性能和系统稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值