UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS リソース管理




■リソース管理


Linuxサーバを運用していて何か調子が悪い、といったときには原因を調査する必要があります。そういった際に役立つコマンド群の覚書です。


まずは定番のtopコマンドです。CPU、メモリー、プロセスの状態を確認できます。「< >」を押せばシステムリソースをソートして表示できます。表示される項目の中にload averageという項目がありますが、これがひとつのCPU負荷の目安になります。負荷の少ないサーバであれば1以下の少数が表示されていると思いますが、値が1になると処理待ちのプロセスが発生しており負荷が高い状態ということになります。10ともなれば異常事態とも言えますがクアッドコアなどのCPUを積んでいる場合はコア数で割り算を行った値が正と思って良いようです。


# top

top - 02:42:21 up 2 min,  2 users,  load average: 1.25, 0.63, 0.24
Tasks: 138 total,   1 running, 137 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.7%us,  0.7%sy,  0.0%ni, 96.2%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   1012704k total,   462944k used,   549760k free,    23264k buffers
Swap:  2031608k total,        0k used,  2031608k free,   178552k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 2204 root      20   0  163m  28m 6756 S  2.7  2.9   0:03.39 Xorg               
 2634 toshi     20   0  283m  12m 9368 S  0.7  1.3   0:00.50 gnome-terminal     
    7 root      20   0     0    0    0 S  0.3  0.0   0:00.16 events/0           
  255 root      20   0     0    0    0 S  0.3  0.0   0:00.06 scsi_eh_1          
 2513 toshi     20   0  519m  20m  13m S  0.3  2.0   0:00.89 nautilus           
    1 root      20   0 19352 1564 1252 S  0.0  0.2   0:01.76 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0        
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0         
    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup             
    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper            
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns              
   11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr          
   12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                 
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 sync_supers        


Cpu(s)のところに表示されているアルファベット2文字は以下の意味です。


項目  説明 
us  ユーザプロセスの割合 
sy  システムプロセスの割合 
ni  優先度を変更した ( nice ) ユーザプロセスの割合 
id  アイドル状態の割合 
wa  IO終了待ち状態の割合 
hi  ハードウェア割り込み要求の割合 
si  ソフトウェア割り込み要求の割合 
st 仮想化環境で他のOSに消費された割合 


「vmstat」コマンドは仮想メモリーの統計情報を表示するコマンドです。メモリの他、CPUやデバイスの割り込みの状況も確認可能です。Linuxが重いと感じたときはvmstatを使えば原因がCPUを使い切っているのかメモリなのかデバイスの転送周りでI/Oを使い切っているのかなどの切り分けの手助けとなります。

以下のように実行すると容量をメガ単位で10秒間隔で3回状態を取得できます。

# vmstat -S M 5 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0    402     23    303    0    0   759   141  195 1225  4  7 82  8  0	
 0  0      0    402     23    303    0    0     0    12   59  144  1  1 98  1  0	
 0  0      0    402  
   23    303    0    0     0     0   40   68  0  0 100  0  0	


CPUの項目に関してはtopと同様です。その他の項目の意味について以下にまとめます。

memory
swpd  スワップ領域の使用量。 
free  空きメモリの容量。重い処理をしているわけでもないのに大きくなっていることがありますが問題ありません。 
buff  カーネルがバッファとして使用している容量。 
cache  ディスクのキャッシュとして保存しているメモリ容量。値が大きくなることがありますが
未使用と同義で空きメモリがもったいないのでキャッシュとして利用していることが一般的です。 
swap
si スワップ領域から読み込んでメモリに展開した容量 
so  スワップ領域に書き込んだデータの容量
io
bi  ブロックデバイスから読み込んだ容量 
bo  ブロックデバイスに書き込んだ容量 
system
in  割り込み処理の回数 
cs  コンテクストスイッチの回数 


「free」コマンドはシステム上の空きメモリと使用中のメモリを表示するコマンドです。メモリの使用量は上述のtopやvmstatで確認できますがfreeコマンドを使えばメモリのみの空き容量を詳細に確認できます。-mオプションをつければ容量をメガ単位で表示できます。


# free -m
             total       used       free     shared    buffers     cached
Mem:           988        790        198          0         28        466
-/+ buffers/cache:        296        692
Swap:         1983          0       1983


定期的に実行する「watch」コマンドとfreeコマンドを組み合わせればメモリの空き容量をモニタリングできます。watchコマンドはデフォルトでは2秒間隔でwatchコマンドの次に指定したコマンドを実行します。-nオプションをつければ指定した秒間隔で実行出来ます。

# watch -n 5 free -m

Every 5.0s: free -m                                                    Tue Jul  2 03:52:47 2013

             total	 used       free     shared    buffers     cached
Mem:           988        789        199          0         28        466
-/+ buffers/cache:        294        694
Swap:         1983          0       1983


「iotop」コマンドはtopコマンドライクなI/Oモニターです。プロセス、スレッドごとにI/O使用状況を表示できます。プロセスのうちどのプロセスが原因でディスクの負荷が高まっているのかを確認できます。システムのボトルネックの分析に役立ちます。これは標準ではインストールされていないことが多いのでyumからインストール後にコマンドを実行します。

# yum install iotop
# iotop

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                         
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cgroup]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [async/mgr]
   12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [pm]
   13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
   14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]


「iostat」コマンドはディスクIOの統計情報を取得できるコマンドです。パラメータとして時間や回数を入力しない場合は現在のディスクIOの統計情報を1回出力します。サーバの運用においてストレージの負荷状況を監視するのは極めて重要です。Linuxでストレージの負荷状況を調べるには様々なコマンドがありますがiostatコマンドはCPUの使用状況とストレージIOの状態が確認できるのでおすすめです。-mオプションでメガ表記にできます。


# iostat -m
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 	07/02/2013 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.49    0.10    1.22    0.95    0.00   97.24

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda               2.89         0.05         0.03        436        216

出力の意味は以下の通りです。

項目  説明 
tps 1秒間のIOリクエスト数
Blk_read/s 1秒間の読み込みブロック容量
Blk_wrtn/s  1秒間の書き込みブロック容量
Blk_read  ディスクの読み込みブロック容量
Blk_wrtn  ディスクの書き込みブロック容量

-xオプションをつけることでさらに詳細なデータを取得することができます。

# iostat -mx
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 	07/02/2013 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.48    0.10    1.19    0.91    0.00   97.32

Device:    rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          0.58     6.00    2.12    0.67     0.05     0.03    57.56     0.08   29.37   4.69   1.31

各項目の意味は下記の通りです。

項目  説明 
rrqm/s 1秒間のデバイスへマージされた読み込みリクエスト数
wrqm/s 1秒間のデバイスへマージされた書き込みリクエスト数
r/s 1秒間の読み込みリクエスト数
w/s 1秒間の書き込みリクエスト数
rMB/s 1秒間の読み込みメガバイト数
wMB/s 1秒間の書き込みメガバイト数
avgrq-sz  IOリクエストの平均IOサイズ 
avgqu-sz  IOリクエストの平均キューサイズ 
await  IOリクエストの平均待ち時間 
svctm  IOリクエストの平均処理時間 
%util  IOリクエストのCPU使用率 

「sar ( System Admin Reporter )」コマンドはCPUやネットワーク、メモリー、ディスクなどの情報を出力できるコマンドです。前述したコマンドと違いこのコマンドは過去に遡って出力することが可能です。主要なオプションとして以下があります。

項目  説明 
-A 全ての監視結果を出力する
-u CPUの利用状況
-r メモリー利用率の状態
-R メモリーの状況
-S スワップ領域の利用状況
-W スワップの状態
-b ディスクIOと転送率の状況
-s 指定した時間のパフォーマンスデータを出力 ( 初期設定必要 )

sarコマンドはsysstatパッケージに含まれます。インストールされていない場合はまずこれをインストールします。以下、使用例です。

# yum install sysstat
# rpm -qa | grep sysstat
sysstat-9.0.4-20.el6.x86_64


# CPUの状態を3秒間隔で3回取得する
# sar -u 3 3
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 	07/02/2013 	_x86_64_	(1 CPU)

05:24:40 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
05:24:43 AM     all      2.39      0.00      1.71     11.26      0.00     84.64
05:24:46 AM     all      1.02      0.00      0.68      0.00      0.00     98.30
05:24:49 AM     all      3.86      0.00      2.11      3.86      0.00     90.18
Average:        all      2.41      0.00      1.49      5.05      0.00     91.06

# メモリ利用率を3秒間隔で3回取得する
# sar -r 3 3
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 	07/02/2013 	_x86_64_	(1 CPU)

05:25:30 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
05:25:33 AM    218752    793952     78.40     34528    446336    573580     18.84
05:25:36 AM    218752    793952     78.40     34536    446336    573580     18.84
05:25:39 AM    218500    794204     78.42     34536    446336    573580     18.84
Average:       218668    794036     78.41     34533    446336    573580     18.84

# 0:00頃から現在までのCPU利用率を表示
# sar -u -s 00:00:00
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 	07/02/2013 	_x86_64_	(1 CPU)

02:40:32 AM       LINUX RESTART

02:50:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:00:01 AM     all      0.72      0.00      0.62      0.60      0.00     98.07
03:10:01 AM     all      0.40      0.00      0.86      0.14      0.00     98.61
03:20:01 AM     all      0.03      1.37      4.20      4.61      0.00     89.79
03:30:01 AM     all      0.04      0.01      0.55      0.78      0.00     98.61
03:40:01 AM     all      0.05      0.00      0.40      0.03      0.00     99.53
03:50:01 AM     all      0.05      0.00      0.41      0.03      0.00     99.52
04:00:01 AM     all      0.53      0.00      0.55      0.06      0.00     98.85
04:10:01 AM     all      0.08      0.00      0.48      0.05      0.00     99.39
04:20:01 AM     all      0.08      0.00      0.49      0.02      0.00     99.41
04:30:01 AM     all      0.07      0.00      0.48      0.02      0.00     99.43
04:40:01 AM     all      0.08      0.00      0.47      0.07      0.00     99.39
04:50:01 AM     all      1.44      0.00      1.42      0.46      0.00     96.68
05:00:01 AM     all      0.14      0.00      0.41      0.02      0.00     99.43
05:10:01 AM     all      0.39      0.00      0.48      0.05      0.00     99.08
05:20:01 AM     all      0.05      0.00      0.38      0.21      0.00     99.37
Average:        all      0.28      0.09      0.81      0.48      0.00     98.34

これらの過去の性能データは「/var/log/sa/sa**」というファイル名で保存されます。例えば19日のデータから23:30から23:55までの性能データを確認するには以下のようにコマンドを入力します。

# sar -u -f /var/log/sa/sa19 -s 23:30:00 -e 23:55:00


 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.