KUSANAGI にインストールされている保守向けコマンド(sar編)

大曲仁

「サーバーの異常を把握するためのsarコマンドについて詳しく紹介しています。使用率が高い場合や対策方法についても触れており、%user値が高い時はアプリケーションに問題があり、%system値が高い時はデータベースへの要求が高い傾向があります。メモリ搭載量やディスク負荷の解析も可能で、問題解析の際に活用できます。最適なサーバー運用のために役立つ内容となっています。」

KUSANAGI環境で、サーバのトラブル対応を行うときに、よく使うコマンドと、その結果に対する指標などを紹介していきたいと思います。実行結果の項目の意味については、より詳しく解説されているサイトなどもあり、改めて解説する意味も薄いので、そちらを参照してもらえればと思います。

今回紹介する sar コマンドは、サーバでの処理が重くなったときに、まず最初にサーバ全体の状況を把握するのに適切なコマンドです。
オプションなしで実行した場合、当日10分間隔での CPUの使用率 ≒ CPUの負荷状況を表すものとなっていますが、%iowait の値で、ディスク負荷を見て取ることもできます。

08時00分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
08時10分01秒     all      3.09      0.00      1.20      0.08      0.00     95.64
08時20分01秒     all      1.54      0.00      0.82      0.00      0.00     97.64
08時30分01秒     all      1.62      0.00      0.84      0.01      0.00     97.54
08時40分01秒     all      2.41      0.34      1.00      0.03      0.00     96.22
08時50分01秒     all      1.56      0.00      0.81      0.01      0.00     97.62

%user 値は、平時において高くて30、できれば20以下に抑えておくくらいが望ましいです。これを上回っていると、処理遅延を起こしやすくなり、ポータルサイトで紹介された際など、アクセススパイクを処理できず機会損失を生みやすくなってしまいます。
%user 値が高い場合は、アプリケーション(サイトを運用しているWordPress等のCMSやフレームワークなど)に起因していることが多いです。サーバの処理能力に比して、アプリケーションが要求する処理が多いことが原因なのですが、これに陥るのは、アプリケーション自体の設計が悪く1アクセスに多数の処理が必要になっている、Webサイトへのリクエスト数に対しサーバスペック自体が低い、また、これらが複合している場合に発生します。
対策としては、簡易な解決法はサーバスペックを上げる方法ですが、当然ながらサーバの費用も上がってしまうため、順序としては、アプリケーション自体のボトルネック有無を洗い出し、ボトルネックへの対処を行った後に、それでも負荷が高い場合はサーバスペックを上げるのが望ましいと言えます。もちろん、ボトルネックの調査・対処には時間がかかりますし、喫緊の場合は、一時的にサーバスペックをあげて暫定対処を行い、その後にボトルネックへの対処を行う方法を取ることも有効です。

%system 値は、通常は1桁値になりますが、データベースへの要求が高い場合にも、この値が上がる場合があります。恒常的に10を超えるような場合は、データベースのスローログを確認し、時間がかかってしまっているSQLがないか確認してみてください。

%iowait 値も平時は1桁となります。恒常的に5を超えているような場合は、メモリ搭載量が不十分で swap が発生していたり、データベースへのリクエストが不適切で一時ファイルを作成している等が考えられます。前者の場合への対処は、サーバスペックを上げてメモリの搭載量を増やす必要があります。後者の場合は、データベースのテーブル構造、インデックスの見直し、SQLの見直し等が有効な対策となります。

%steal 値も平時は1桁値となることが多いです。この数値が20を恒常的に超える場合は、対処を検討した方が良いといえます。原因は2つ考えられ、1つは同じ物理サーバ上で動作している他の仮想マシンの負荷が大きくサーバの処理が遅延している場合、もう1つはAWSのt系インスタンスでCPUクレジットを使い切っている場合です。CPUクレジットの残量は、AWSのWebコンソール上で確認できます。
他の仮想マシンにより影響を受けている場合は、仮想マシンが別の物理サーバで動作するように変更するように、仮想マシンを一旦停止し(再起動では仮想マシンが移動されないためNG)、その後、開始する必要があります。
AWSのt系インスタンスで、CPUをクレジットを使い切っている場合、%user 値も高くなっているはずで、基本的には同様の対処が求められます。ただし、このケースにおいては、t系インスタンスのCPUクレジットモードを無制限モードとすることで回避することが可能です。もちろん、無制限モードにした場合は、追加の利用料金が発生しますので、一時的な対処と捉えてください。

sar コマンドのオプション

sar コマンドには、ざまざまなオプション指定があり、特によく使っているオプションをいくつか紹介しておきたいと思います。

リアルタイム更新

数値のオプションを指定することで、指定秒間ごとに最新値が表示されます。リアルタイムに負荷状況をモニタリングしたいときに便利です。

sar 1
15時14分25秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
15時14分26秒     all      0.50      0.00      0.50      0.00      0.00     99.00
15時14分27秒     all      1.49      0.00      1.00      0.00      0.00     97.51
15時14分28秒     all      1.51      0.00      0.00      0.00      0.00     98.49
15時14分29秒     all      1.49      0.00      1.00      0.00      0.00     97.51
15時14分30秒     all      1.01      0.00      0.50      0.00      0.00     98.49

過去の状況

fオプションを指定することで、過去1ヶ月の結果を日毎に見ることができます。fオプションで指定する値は、/var/log/sa/sann となり nn に日付の数値を指定します。

sar -f /var/log/sa/sa30
00時00分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時10分01秒     all      2.38      0.03      1.13      0.06      0.00     96.41
00時20分01秒     all      2.56      0.00      1.01      0.89      0.00     95.54
00時30分01秒     all      1.43      0.00      0.80      0.00      0.00     97.77
00時40分01秒     all      1.79      0.34      0.89      0.01      0.00     96.98
00時50分01秒     all      1.56      0.00      0.83      0.00      0.00     97.61
01時00分01秒     all      1.55      0.00      0.83      0.00      0.00     97.62

メモリの状況

rオプションの指定で、メモリの使用状況、Sオプションで、メモリとスワップの状況を見ることができます。
ただし、現時点の状況を見たいのであれば、free コマンドの方が、簡潔であり必要十分です。r、Sオプションは、状況推移を見るのに用います。

sar -r
08時00分01秒 kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
08時10分01秒   1690596   4036520   6456100     79.25       716   3133492  13293264    107.72   3668232   2072892         4
08時20分01秒   1688792   4034828   6457904     79.27       716   3133604  13304260    107.81   3699712   2043616         4
08時30分01秒   1661132   4007224   6485564     79.61       716   3133660  13315640    107.90   3699716   2071108         8
08時40分01秒   1670720   4016968   6475976     79.49       716   3133816  13321136    107.94   3699772   2061636         0
08時50分01秒   1683836   4030148   6462860     79.33       716   3133880  13308484    107.84   3699816   2048480         4
sar -S
08時00分01秒 kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
08時10分01秒   2448280   1746020     41.63     70808      4.06
08時20分01秒   2448280   1746020     41.63     70808      4.06
08時30分01秒   2448280   1746020     41.63     70808      4.06
08時40分01秒   2449816   1744484     41.59     71080      4.07
08時50分01秒   2449816   1744484     41.59     71080      4.07

ロードアベレージ

qオプションでは、ロードアベレージを表示することができます。topコマンドでもロードアベレージを表示することができますが、topコマンドではリアルタイムに表示が更新され、プロセスごとのCPU、メモリ使用率も合わせて見ることができるのに対し、qオプションでは、ロードアベレージを推移として見ることができるようになっており、プロセスごとの使用率は見ることができません。現時点の状況把握には、topコマンド、現時点までの状況推移の把握には、qオプションを使うのが妥当と言えます。

sar -q
08時00分01秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
08時10分01秒         4       491      0.09      0.06      0.07         0
08時20分01秒         5       489      0.00      0.04      0.06         0
08時30分01秒         6       495      0.02      0.03      0.04         0
08時40分01秒        10       490      0.16      0.06      0.03         0
08時50分01秒         8       487      0.00      0.02      0.00         0

sar コマンドでは、大きなボトルネック切り分けと状況確認はできますが、どのプロセスが負荷になっているのかまでは見て取ることはできません。次回は、今回言及した top、free コマンドなどについても紹介していきたいと思います。

<< 実例から学ぶ、OSSコミュニティに不具合の報告を行う前に知っておきたいことKUSANAGI にインストールされている保守向けコマンド(top編) >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解