次のページサーバが重いとはサーバ管理者だけではなく誰でも一度は経験したことがある「サーバが重い」という現象。一言で「重い」というのは簡単ですが、重いというのは具体的にどういうことなのでしょうか。ここでいう重い・軽いは単一のベクトルで判断できるような簡単な代物ではなく、様々な要素によって発生する現象です。処理が重いからといって闇雲にハードウェアを増強するのは賢いやり方とはいえません。メモリ不足が高負荷の原因なのに、CPUを高速なものに変えても効果はほとんどないでしょう。このような無駄な投資を避けるためにも、負荷の原因を特定して素早く対応策を講じるのはサーバ管理者にとって重要なスキルになります。本記事ではサーバ負荷の特定の仕方と対策の仕方について、簡単な概要を説明します。今回はLinuxでの操作を前提にしています。他のUNIX処理系でも同様な操作が行えるとは思いますが、コマンドや出力結果が若干違う場合があります。応答速度が遅い「重い」とは具体的にどういうことでしょうか。処理が重いと観測するのは通常は人です。観測者が興味があるのは、自分が実行している処理の応答速度になります。応答速度が遅いときに「重い」と感じます。応答速度が遅ければ重いのかというとそうではなく、実際は本当にその処理が「遅い」のかもしれません。遅い処理を速くするのはまた別問題ですので、本記事では取り扱いません。実行待ちプロセスが存在する単に応答速度が遅いといっても、もしかしたらネットワーク帯域の問題かもしれません。問題の切り分けのためにも、まずはサーバ上での処理について考えてみます。サーバ上での処理の応答速度が遅いということは、他のプロセスの処理に時間がかかってしまい、目的のプロセスがなかなか処理されないということになります。サーバ上での負荷が高いということは、待ちプロセスが存在するということです。実行待ちプロセスがたくさん存在すれば存在する程、「目的のプロセスへの切り替えが遅くなって応答速度が遅くなる」つまりサーバ負荷が高くなっていきます。実行待ちプロセスの数を確認するそれでは実行待ちのプロセスを確認しましょう。実行待ちプロセスの数を確認するにはtopコマンドを使用します。average」が実行待ちプロセスの数を表します。0.33数字が3つありますが、左から順番に1、5、15分間の実行待ちプロセスの平均数になっています。この実行待ちプロセスの平均数(ロードアベレージ)がサーバ負荷の判断基準となる重要な数値になります。ロードアベレージがCPU数より大きくなっている場合は「処理が追いついていない」つまりサーバ負荷が高いということです。一昔前までは単純にロードアベレージが1以上かどうか判断すればよかったのですが、最近はマルチコアのCPUが増えてきたので、ちゃんとサーバのCPUのコアがいくつなのか確認するようにしましょう。1CPU」に見えるからです。コアが2つのCPUの場合は実行待ちプロセスが2以下になっているかどうかをチェックしてください。ロードアベレージがCPU数以下だといって安心してはいけません。ロードアベレージはあくまでも平均数ですから、一時的に実行待ちプロセスが発生している状況も考えられます。できるだけ0に近づける努力を怠らないようにしましょう。CPUの使用状況を確認するまずはCPUの使用状況を確認しましょう。topコマンドを実行するとに次のようにCPUの使用率が表示されています。0.0%st主に見るのは次の3つの値です。表1:CPUの使用状況で確認する項目userの値が大きい(100%に近い)場合はCPU負荷が高くなっています。CPU負荷の高い状態が継続している場合はCPUがボトルネックになっています。idleが大きい場合はCPUがほとんど使われていません。仮にサーバ負荷が高いとしたら、ボトルネックは別の所にあるということです。waitが大きい場合はI/O待ちをしているプロセスが多く存在する可能性があります。この場合はディスクI/Oかネットワークがボトルネックになっている可能性が高いです。CPU負荷の高いプロセスを特定するにはtopコマンドを実行中に「P(大文字)」を押します。するとCPU使用率の高い順にプロセスをソートしてくれますので、CPU負荷の高いプロセスを特定することが可能です。CPUの負荷が高い場合の対策CPUの負荷が高い場合は次のような対策を行います。時間のかかる処理を高速化するCPUを高速なものに変更するサーバを増やして負荷分散する事前にスケジューリング優先順位を下げて実行する表2:CPUの負荷が高い場合の対策たまにプログラムが暴走してCPUの負荷が高くなる場合があります。そのような場合は、該当プロセスをkillコマンドを使って終了させましょう。CPUの負荷が高くても終了できないプロセスの場合は、ひたすら待つしかありません。バックグランドの処理などで実行スピードが要求されない場合は、reniceコマンドを使ってプロセスのスケジューリング優先順位を下げましょう。CPU負荷の高い状態が頻繁に起きる場合は、なんらかの恒久的な対策を行う必要があります。プログラムそのものを高速化したり、ハードウェアを増強するなどして対策してください。実行スピードが要求されないバックグランドの処理は、niceコマンドを使ってスケジューリングの優先順位を下げてやるのも1つの方法です。SPARC版の開発を行う。2002年4月、HDEに入社。サーバ自動選択型FTPサーバの開発」を行う。退職後、シリコンバレーに語学留学のため渡米。2004年12月、帰国してウノウに参画。写真共有サイト「フォト蔵」を開発中。ブログ:ベイエリア情報局http://blog.bz2.jp/この記事の評価をお聞かせくださいボタンをクリックしますとウインドウが開きます。