連載
» 2007年12月25日 00時00分 公開

実践! Xenで実現するサーバ統合(3):仮想マシンの集約密度を決めるサイジング (2/3)

[中嶋一樹, 高橋浩和,住商情報システム株式会社/VA Linux Systems Japan株式会社]

既存サーバの情報収集

 Linuxでは、sysstatユーティリティによってサイジングに必要な情報を網羅的に取得することができます。RHEL5であれば、以下のようにyumコマンドで簡単にインストールすることができます。

# yum install sysstat -y

 sysstatユーティリティには、sar、iostat、mpstatなどいくつかのコマンドラインインターフェイスが含まれます。これらのツールを用いて前述の4つのハードウェアリソースの使用状況を確認します。

【関連記事】http://www.atmarkit.co.jp/flinux/rensai/root07/root07b.html
障害の兆候を見逃さないためのサーバ監視


 都合の良いことに、sysstatユーティリティをインストールすると、ハードウェアリソース状況を取得する処理が自動的にcronタスクとして登録され、10分間隔でデータを記録してくれます。このデータはバイナリ形式で、/var/log/sa/以下に「saxx」という名称で日ごとに保存されています。

 このデータを読み出すには、sarコマンドを用います。以降ではこのsarコマンドを用いて、各種ハードウェアリソース状況を確認する手段を述べます。

■CPU使用率

 CPU使用率データの表示は、sarコマンドのデフォルトオプションです。つまり何もオプションを指定しないでsarコマンドを実行すると、同日中のCPU使用率のデータが時系列表示され、最終行に平均値が表示されます。

# sar
11:00:01 PM      CPU  %user     %nice   %system    %iowait    %steal    %idle
11:10:01 PM      all   0.09       0.00    0.07       0.00      0.01     99.83
11:20:01 PM      all   2.13       0.00    6.64       0.07      0.34     90.82
11:30:01 PM      all   0.60       0.00    2.42       0.00      0.01     96.96
11:40:01 PM      all   0.59       0.00    2.43       0.00      0.01     96.97
11:50:01 PM      all   0.53       0.00    2.42       0.00      0.02     97.04
(途中省略)
Average:         all   0.51       0.00     0.46      79.91     0.12     19.00

 別の日のデータを表示させたい場合には、/var/log/sa/以下のsaxxファイルを-fオプションで指定することによって、任意の日付のデータを表示することができます。

# sar -f /var/log/sa/sa17
(出力結果は省略)

 この出力結果で重要なのは、%user列%system列です。この2つの値の合計が一般的なCPU使用率となります。以下のコマンドでCPU使用率の平均値を取得できます。

# sar | grep Average | awk '{ print $3+$5"%" }'
0.97%

メモリ使用量

 メモリの利用状況は-rオプションで表示できます。

# sar -r
05:40:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
10:20:01 AM   7565416   1105816     12.75    388496    146472    524156       124      0.02        16
10:30:01 AM   7558760   1112472     12.83    393316    146776    524156       124      0.02        16
10:40:01 AM   7550620   1120612     12.92    399068    146912    524156       124      0.02        16
(途中省略)
Average: 5785  256359  97.79  1469  138471  0  0  0.00  0

 この出力結果で重要なのはkbmemused列kbbuffers列kbcached列です。kbmemusedの値は、用途を問わずOSが確保していたメモリ量をキロバイト単位で示しています。kbbuffersとkbcachedは、その消費メモリ量の中でページキャッシュとして確保されていた容量をキロバイト単位で示しています。

 Linux OSは、ファイルシステムのデータをできる限りページキャッシュに載せようとするので、OSをある程度の時間稼働させておくと、kbmemusedは物理メモリ量に近い値にまで上昇します。しかし、実際にカーネルやプロセス空間によって確保されている容量はここからkbbuffersとkbcachedを引いた値になります。以下のコマンドによって、この値の平均値をキロバイト単位で取得できます。

# sar -r | grep Average | awk '{ print $3-$5-$6"Kbyte" }'
116419Kbyte

 上記の例では、システム稼働に最低限必要なメモリ量は約96Mbytesということになります。

 ただし、Linux OSにおいてページキャッシュはシステムの動作を高速化させるのに重要な役割を果たしているため、メモリ割り当てがあまりに少ないと、全体的な性能が落ち込んでしまいます。一時的に大量のメモリを必要とするような特定のコンパイル処理などでは、正常に動作しなくなる可能性もあります。また、プロセス空間に確保されているメモリがスワップしてしまっているようでは、システムとして完全にメモリ不足に陥っているといえます。

 従って必要メモリの算出においては、上記の値はあくまでも「最低限必要なメモリの指標」という認識にとどめておき、実際に仮想マシンに割り当てるメモリは、そのシステム上のアプリケーションの動作要件をターゲットとして考えるのがよいでしょう。

■ネットワーク帯域幅

 ネットワーク帯域の利用状況は-nオプションで表示できます。ただし、このままではすべてのインターフェイスに関するデータが表示されますので、適宜、対象となるインターフェイス名をgrepで引っ掛けてください。

# sar -n DEV
12:40:01 AM     IFACE      rxpck/s     txpck/s      rxbyt/s    txbyt/s     rxcmp/s     txcmp/s     rxmcst/s
12:50:01 AM        lo        0.00        0.00        0.00        0.00        0.00        0.00        0.00
12:50:01 AM      eth0        6.02        0.00      944.60        0.14        0.00        0.00        0.00
12:50:01 AM      sit0        0.00        0.00        0.00        0.00        0.00        0.00        0.00
01:00:02 AM        lo        0.00        0.00        0.00        0.00        0.00        0.00        0.00
01:00:02 AM      eth0        4.79        0.00      835.48        0.07        0.00        0.00        0.00
01:00:02 AM      sit0        0.00        0.00        0.00        0.00        0.00        0.00        0.00
(途中省略)
Average:           lo      712.27      712.27     245016.84   245016.84      0.00        0.00        0.00
Average:         eth0      153.02      104.25      11788.12   211079.32      0.00        0.00        0.00
Average:         sit0        0.00        0.00        0.00        0.00        0.00        0.00        0.00

 この出力結果で重要なのは、rxbyt列txbyt列です。これらはそれぞれ1秒間に「受信したデータ量」と「送信したデータ量」をバイト単位で示しています。以下のコマンドで対象となるインターフェイスのそれぞれの平均値をバイト単位で取得できます。

# sar -n DEV | grep eth0 | grep Average | awk '{ print "Rx:"$5"byte/s\nTx:"$6"byte/s" }'
Rx:11788.12byte/s
Tx:211079.32byte/s

■ディスク帯域幅

 ディスク帯域幅は-bオプションで表示できます。

# sar -b
12:40:01 AM        tps        rtps        wtps     bread/s     bwrtn/s
12:50:01 AM        0.11       0.00        0.11      0.00           1.32
01:00:02 AM        0.11       0.00        0.11      0.00           1.31
01:10:01 AM        0.14       0.01        0.13      0.16           1.50
01:20:01 AM        0.11       0.00        0.11      0.00           1.31
01:30:01 AM        0.11       0.00        0.11      0.00           1.31
01:40:01 AM        9.82       9.43        0.39    155.98          14.07
(途中省略)
Average:          44.17      43.65        0.52    929.57           9.34

 この出力結果で重要なのは、bread/s列bwrtn/s列です。これらはそれぞれ秒間にディスクから「読み出したデータ量」と「書き込んだデータ量」をブロック単位で示しています。以下のコマンドでそれぞれの平均値をブロック単位で取得できます。

# sar -b | grep Average | awk '{ print "Read:"$5"block/s\nWrite:"$6"block/s" }'
Read:929.57block/s
Write:9.34block/s

 ここまででサイジングに必要な情報の1つ目となる、移行対象となるサーバのハードウェアリソース利用状況を取得することができました。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。