2013. 12. 26. 16:46

[Linux/Ubuntu 시스템 관리] disk 모니터링하기 (iostat, vmstat, lsof)

[Research/Ubuntu] - [Linux/Ubuntu 시스템 관리] CPU 사용량 모니터링 (iostat, dstat)에서 cpu 사용량 체크를 하였다. 이제 disk 사용에 대한 모니터링을 해보자.


disk 사용 모니터링은 아래와 같이 iostat을 사용할 수 있다(필요한 경우 sudo apt-get install sysstat 실행).


~$ iostat 3

Linux 2.6.38-8-generic (greenfish-virtual-machine) 12/26/2013 _i686_ (1 CPU)


avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.51    0.04    0.34    0.39    0.00   98.73


Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.01         0.05         0.00        856          0

sdb               6.07       136.48       282.56    2486324    5147416


avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           1.68    0.00   39.26   59.06    0.00    0.00


Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.00         0.00         0.00          0          0

sdb            1129.87     71508.72     71863.09     213096     214152


avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           2.35    0.00   29.19   68.46    0.00    0.00


Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda               0.00         0.00         0.00          0          0

sdb            1101.34     68083.22     71081.88     202888     211824

...


vmstat 명령으로 확인할 수 있다.

~$ vmstat -d

disk- ------------reads------------ ------------writes----------- -----IO------

       total merged sectors      ms  total merged sectors      ms    cur    sec

ram0       0      0       0       0      0      0       0       0      0      0

ram1       0      0       0       0      0      0       0       0      0      0

ram2       0      0       0       0      0      0       0       0      0      0

...

loop7      0      0       0       0      0      0       0       0      0      0

sr0        0      0       0       0      0      0       0       0      0      0

sda      107      0     856     100      0      0       0       0      0      0

sdb    71969  27636 3556116  210176  56937 730120 6296464 9890772      0    163

fd0        0      0       0       0      0      0       0       0      0      0

~$


아래는 read/write 정보를 표기한 것이다. 몇몇 장치(LVM, RAID, ...)에서는 동작하지 않는다.

~$ vmstat -p sdb5

sdb5          reads   read sectors  writes    requested writes

               71405    3550450      56866    6280640

~$


아래와 같이 현재 열려있는 file이나 directory를 표시한다.

~$ sudo lsof | less

다음과 같이 진행된다.

COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME

init         1       root  cwd       DIR       8,21      4096          2 /

init         1       root  rtd       DIR       8,21      4096          2 /

init         1       root  txt       REG       8,21    124704    1439034 /sbin/init

init         1       root  mem       REG       8,21     79672     524137 /lib/i386-linux-gnu/libnsl-2.13.so

init         1       root  mem       REG       8,21    243400     524106 /lib/i386-linux-gnu/libdbus-1.so.3.5.4

init         1       root  mem       REG       8,21    117960     524084 /lib/i386-linux-gnu/ld-2.13.so

init         1       root  mem       REG       8,21     29984     523327 /lib/libnih-dbus.so.1.0.0

init         1       root  mem       REG       8,21   1434180     524097 /lib/i386-linux-gnu/libc-2.13.so

init         1       root  mem       REG       8,21     75040     523329 /lib/libnih.so.1.0.0

init         1       root  mem       REG       8,21     38500     524147 /lib/i386-linux-gnu/libnss_nis-2.13.so

init         1       root  mem       REG       8,21     26400     524139 /lib/i386-linux-gnu/libnss_compat-2.13.so

init         1       root  mem       REG       8,21     42580     524143 /lib/i386-linux-gnu/libnss_files-2.13.so

:

...

~$


bash shell에 의해 열려있는 파일을 확인한다.

~$ lsof -c bash

COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

bash    5158 greenfish  cwd    DIR   8,21     4096 1177348 /home/greenfish

bash    5158 greenfish  rtd    DIR   8,21     4096       2 /

bash    5158 greenfish  txt    REG   8,21   822420 2093060 /bin/bash

bash    5158 greenfish  mem    REG   8,21   223468  523323 /lib/libncurses.so.5.7

...

~$


각 프로세스의 각각 현재 directory를 표기한다.

~$ sudo lsof -d cwd

lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/greenfish/.gvfs

      Output information may be incomplete.

COMMAND    PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

init         1       root  cwd    DIR   8,21     4096       2 /

kthreadd     2       root  cwd    DIR   8,21     4096       2 /

ksoftirqd    3       root  cwd    DIR   8,21     4096       2 /

...

sudo      5336       root  cwd    DIR   8,21     4096 1177348 /home/greenfish

lsof      5338       root  cwd    DIR   8,21     4096 1177348 /home/greenfish

lsof      5339       root  cwd    DIR   8,21     4096 1177348 /home/greenfish

~$


사용자별 열린 file과 directory를 표기한다.

~$ lsof -u greenfish

COMMAND    PID      USER   FD      TYPE     DEVICE SIZE/OFF       NODE NAME

gnome-key 1809 greenfish  cwd       DIR       8,21     4096          2 /

gnome-key 1809 greenfish  rtd       DIR       8,21     4096          2 /

...

lsof      5501 greenfish    4r     FIFO        0,8      0t0     176972 pipe

lsof      5501 greenfish    7w     FIFO        0,8      0t0     176973 pipe

~$


/mnt/sda1를 열은 process를 나열한다.

~$ lsof /mnt/sda1

COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME

file_lock 5655 greenfish    3w   REG    8,1        0 11660 /mnt/sda1/lock.dmy

file_lock 5655 greenfish    4r   REG    8,1        0 11660 /mnt/sda1/lock.dmy

~$


/mnt/sda1/test_lock 하부 경로를 열은 process를 나열한다.

~$ lsof +d /mnt/sda1/test_lock/

COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME

file_lock 5723 greenfish    3w   REG    8,1        0 11667 /mnt/sda1/test_lock/lock.dmy

file_lock 5723 greenfish    4r   REG    8,1        0 11667 /mnt/sda1/test_lock/lock.dmy

~$