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就可以了。

发布了5 篇原创文章 · 获赞 0 · 访问量 493

猜你喜欢

转载自blog.csdn.net/TheRainManFSA/article/details/105044196