8wired

とりあえずやってみるブログ

レンタルサーバ

レンタルサーバの負荷状況をモニタリングするために使ったコマンドとか

投稿日:

ふとレンタルサーバの負荷状況をモニタリングしてみようと思いました。

共有レンタルサーバではsnmpによるデータ取得が(たぶん)出来ないので、コマンドたたいたり、/proc配下の情報を読んだりしてデータを取得する事になりますが、取得方法によって取得できるデータの種類や出力フォーマットが異なります。

最終的に自動取得することになるので出来るだけ扱いやすいフォーマットがベターですが、情報を整理するために取得するまでに検討した手段や取得できるデータなど簡単に残しておきます。

Load Averageの取得

Load Averageは、平均的なCPUの占有状況を把握するのに役立つ情報です。一般的に1分、5分、15分の占有状況が取得てきます。

5分の値が1だったら「5分間、1つのCPUがずっと占有され続けているという状態だった」というくらいの認識でいいんじゃないかと思います。CPUが占有され続けると他の処理が疎かになるので、数値が高い場合には気を付けなければなりません。

少ないに越したことはありませんが、CPU(またはコア)が4個あるなら4まで平気、40個あるなら40まで平気、そんな感じだと思います。

uptime

uptimeは、本来サーバの起動時間を取得するコマンドですがLoad Averageも取得できます。

$ uptime
  4:10pm  up 538 days  6:02,  1 user,  load average: 1.52, 1.28, 1.09

load averageに続く3つの数字が、1分、5分、15分の値です。

sar

sarは、Load AverageやCPU使用率など様々な情報が取得できるコマンドです。過去の情報を取得するには権限が必要ですが、リアルタイムの情報は権限不要で取得できます。

「-q」オプションを付けるとLoad Averageが取得できます。

sar -q 1 2 | grep ^Average
Average:            2       518      1.25      1.19      1.05

引数は、第1が取得間隔、第2が取得回数です。第2引数を0にすると継続的に出力されます。ここでは1秒間隔で2回分取得し、平均値を取得しています。

/proc/loadavg

/procは、CPUやメモリなどリソース関連の情報が数多く格納されている場所です。プログラムで取得する場合には、一番利用しやすいかもしれません。

loadavgには、Load Averageの情報が格納されています。

$ cat /proc/loadavg
0.92 1.14 1.05 1/535 6229

選んだ手段

コマンドや/procなどから取得できますが、最終的にphpにLoad Averageを取得する関数が用意されていたので利用しました。

$lavg = sys_getloadavg();
echo "1min:".$lavg[0]." 5min:".$lavg[1]." 15min:".$lavg[2];

CPU負荷状況の取得

CPUの負荷状況は、全体的なCPUの負荷状況を判断したり、どの種類のプロセスがCPUを占有しているかを把握するのに役立つ情報です。負荷率(パーセンテージ)で表すので直感的に把握しやすいです。

CPU負荷率は突発的に上がることがありますが、長時間続かなかったり、慢性的に負荷率が高くなければ問題ないと思います。

top

topコマンドはサーバ負荷のモニタリングで定番のコマンドです。プログラムで取得する場合には、バッチオプション「-b」を利用します。

$ top -bn2 | grep ^Cpu | tail -n1
Cpu(s):  4.3% us,  1.8% sy,  0.2% ni, 93.5% id,  0.2% wa,  0.0% hi,  0.1% si

「-n」オプションは取得する回数です。ここでは2回分を取得して、tailコマンドで最後の1回分だけ取得しています。2回目だけを取得しているのは毎回1回目には同じ結果が出力されるためです。

sar

sarは、Load AverageやCPU使用率など様々な情報が取得できるコマンドです。過去の情報を取得するには権限が必要ですが、リアルタイムの情報は権限不要で取得できます。

$ sar 1 2 | grep ^Average
Average:          all      8.09      0.00      1.00      0.12      0.00     90.78

引数は、第1が取得間隔、第2が取得回数です。第2引数を0にすると継続的に出力されます。ここでは1秒間隔で2回計測し、平均値を取得しています。

sarコマンドが使えないのでレンタルサーバもありますが、数値だけを追う場合にはtopより便利です。cpu使用率の取得だけならmpstatも利用できます。

/proc/stat

/procは、CPUやメモリなどリソース関連の情報が数多く格納されている場所です。プログラムで取得する場合には、一番利用しやすいかもしれません。

statには、サーバが起動してからのCPUの利用時間などが記録されています。

$ head -n1 /proc/stat
cpu  4038229853 133540648 982371763 13298096432 105445521 2665 37003873 0 0

数値は時間経過と共に増えるので、2回取得した差分から負荷率を算出します。

負荷率 = 個別項目の差分 / 全項目の差分の合計 × 100

選んだ手段

差分を求める必要がありますが、細かく調整もしたかったので/proc/statを利用しました。

/proc/statは、topやsarなどの元となる情報なので手間がかかりますがこれを利用するのがいいと思います。

メモリ利用状況の取得

メモリはスワップアウトしてなければ必要以上に気にする必要はないと思います。最近は大容量のメモリを搭載しているサーバが多いので、ブログ中心のサービスだとメモリを使い切ることは稀じゃないかと思います。

freeとvmstat

freeは定番のメモリ利用状況を確認するコマンドです。再利用は少し手間ですが、概要の把握に十分な項目は揃っています。

$ free
             total       used       free     shared    buffers     cached
Mem:       8238724    7834488     404236          0     162488    5426076
-/+ buffers/cache:    2245924    5992800
Swap:      1052216      70812     981404

OSのバージョンによっては「available」というメモリ利用可能量が把握できる項目が追加されています。

$ free
              total        used        free      shared  buff/cache   available
Mem:      197799384     8651392      727628     8099372   188420364   178510200
Swap:     102399996      429076   101970920

vmstatも定番のコマンドです。CPU負荷状況も一緒に取得できますが、1回目の結果は同じなので2回目以降のデータを取得します。

$ vmstat 1 2 | tail -n1
 0  0  70872 473268 178720 5340060    0    0     0  3668 2023  2971  2  6 91  1

sar

sarは、Load AverageやCPU使用率など様々な情報が取得できるコマンドです。過去の情報を取得するには権限が必要ですが、リアルタイムの情報は権限不要で取得できます。

「-r」オプションを付けるとメモリ使用状況が取得できます。freeに比べると再利用しやすいです。

$ sar -r 1 2 | grep ^Average
Average:       155998   8082726     98.11    173320   5631866    981412     70804      6.73      2732

引数は、第1が取得間隔、第2が取得回数です。第2引数を0にすると継続的に出力されます。ここでは1秒間隔で2回取得し、平均値を取得しています。

/proc/meminfo

/procは、CPUやメモリなどリソース関連の情報が数多く格納されている場所です。プログラムで取得する場合には、一番利用しやすいかもしれません。

meminfoには、メモリに関する情報が多数格納されています。

$ cat /proc/meminfo
MemTotal:        8238724 kB
MemFree:          278928 kB
Buffers:          174256 kB
Cached:          5540120 kB
SwapCached:         2732 kB
...

freeやvmstatに比べると項目数が多いので、詳細な利用状況を把握するのに最適です。freeはここの情報を整形したものです。

選んだ手段

今回は概要だけ把握できればよかったので、成形がしやすいvmstatを使う事にしました。

概要だけ欲しいならfreeやsar、詳細まで欲しいなら/proc/meminfoなど状況に応じて使い分けるといいと思います。

まとめ

レンタルサーバによって使えないコマンド、OSのバージョンによる表示項目の違いなどがありましたが、何とかデータが収集できるようになりました。

Cactiに流し込んで視覚的に把握するのが最終目的だったでしたが、無事完成させる事ができました。

データが貯まったら状況を書いてみたいと思います。

-レンタルサーバ
-,

Copyright© 8wired , 2017 All Rights Reserved Powered by STINGER.