会社の規模別監視システム 3−2: Linuxサーバーのコマンドと監視

瀕死のサーバーたち

ピピピピ…ピピピピ…サーバールームに小さく警報音が鳴っています。目の前には、障害を起こしてしまったサーバー…。今朝まで正常に動いていたウェブ・サーバー(とコンテンツを格納したデータベース・サーバー)のはずでしたが、つい30分ほど前に「とても表示が遅い」とユーザーからクレームが入ってしまったのです。

ちょうどミーティングを終えて少し休憩しようとしていたあなた。あわててLinuxの本を片手にサーバールームに走ってきました。ユーザーからの電話やメールが届いている、けっこうみんな騒ぎ出している、なんとかしなくちゃ…と焦る心を抑えて、ひとつずつ確認していきます…。

まず、コンソールにログインできるかどうか。落ち着け、落ち着けと言い聞かせるものの、おもわず指が震えてログインに失敗します。セキュリティ上、かなり複雑なパスワードにしてしまったことを若干後悔しながら(もちろん、複雑なパスワードは大事なことですし、後悔してはいけないのですが)3回めの挑戦でサーバーにログインできました。

まずはサーバーの負荷をみなくては。あなたはLinuxのテキストで覚えたコマンドを打ち込んでいきます。 …top…。

【コマンド解説】topコマンドは、CPUを多く使っている順にシステムのプロセスを表示します。標準で5秒毎に画面が更新されるため、サーバーの状態を継続的にチェックする場合に便利です。

コマンドは成功し、画面にシステムのプロセス一覧が表示されました。ただ、めまぐるしく順位が入れ替わることと、普段、そこまでプロセスを意識してみたことがないため、どのプロセスが重いのかがわかりません。いえ、そもそも、普段のプロセス状況と大きく変わるのかどうかも、すぐには断言できない状態です。

しかし、あなたは慌てません。「まずはロードアベレージ…」視線は load average: 1.12, 2.34, 1.56 へと…。ロードアベレージとは、UNIX系のOSにおけるCPUの稼働率のこと。例えば、CPUが1つのサーバーのとき、ロードアベレージが1.00以下であれば、順調にプロセスが実行されているということです。1.00以上であれば負荷が重く、プロセスの実行に遅延が生じているかもしれません。

「多くのサーバーはCPUが複数搭載されているからね、CPU数やコア数によって、まあいいだろう、OKだろうという値は異なると言われているけれど…厳密なタスク割当の話に目を瞑れば、現場の感覚としては、まずCPUが4ならロードアベレージは4.00まで、12CPUのシステムなら12.00までがなら、一見は正常かな」とサーバーエンジニアは言っていました。確かこのシステムは4CPU…ロードアベレージは簡単に見る限りは問題なさそうです。

次はCPUか…。

CPUのパーセンテージは、topコマンドの画面が再読み込みされてからの「タスクの所要 CPU 時間の占有率」だそうです。総 CPU 時間のパーセンテージで表わされるため、Windowsのパフォーマンス表示と似たイメージで使えそうです。

似たようなCPUのパーセンテージはpsなどのコマンドでも表示されるそうですが、そちらはそのプロセスが起動してから使用したCPUパーセンテージとのことですので、サーバー監視としてはtopのCPUのパーセンテージを使うほうが良さそうです。

しかし、現在のCPU使用率は77%…。そこまで深刻な状況とは思えません。そうであれば、システム全体の負荷がそこまででなかったとしても、なにかプロセスがおかしなことになってアプリケーションの動作を妨げているかもしれません。

…しかし、これでいいのかなあ…。冷や汗を書きながら、改めてLinuxの本をめくっていたあなたの目に、 iowait という文字が飛び込んできました。「I/O負荷が高い場合でもサーバーは重くなります。ディスクと、ネットワークのI/Oを確認してみましょう。」

よくよく見ると、サーバーのハードディスクが猛烈にアクセスしているのか、アクセスランプがずっと点灯しているような印象を受けます。これはディスクの負荷とやらをチェックしてみるほうが良さそうです。そして、どうやらsarコマンドを使うようです。

【コマンド解説】sarコマンド。sar (System Admin Reporter) の略。CPUやメモリ、ディスクなどの使用率を時間ごとに一覧表示してくれる。

…これで問題の原因が見つかると助かるなあ。あなたは、改めてコンソールに向き合うことにしました。

次回に続く。

《 会社の規模別監視システム 3−1:Linuxサーバーについて

シリーズ一覧

[catlist tags=”会社の規模別監視システム” orderby=title order=asc numberposts=-1]