なぜ自分のサーバーだけが重いのか?(サーバーの負荷原因の見つけ方)
これはほとんど自分用に作ったものですが、みなさんの参考にもなればいいかなと思って記事にしました。
「はてな」の伊藤直也さんはじめ、サーバー関連のスペシャリストな人たちが惜しげもなくその知識を書いてくれている「[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)」が大変参考になります。 この本は「idea * idea」でも取り上げられていて「第4章はとにかく読んどけ」と書いてあったので、読みました。 まだ途中なんですけど。笑
その中で、サーバーをいじる人であればすぐに役に立つであろう「トラブルが発生した際の問題の特定方法」として「Linux単一ホストの負荷を見極める」というのがあります。
サーバー周りの問題というと、この負荷がどれほどのものかというのは、個人的にかなり曖昧な知識で「このサーバー一台でどれだけのアクセスがあると負荷がどれくらいか」というのがもう、正直直感みたいな感じで想定していたので、目から鱗の連続でした。
負荷はロードアベレージからスタート
負荷がかかっているような場合に、ネットワーク周りか?サーバー本体なのか?といった切り分けを行う場合にも「ロードアベレージから見る」というように具体的に書いてあって、そこから「このコマンドを使って、さらにこう切り分ける」というように、具体的に書かれてあるので、それに沿っていけば自然と原因が特定されていくような書き方がされてます。
で、この本を読みながら簡単な相関図というか、流れが分かる図があると、それを見ながら読んでいったり、実際の負荷特定の参考にしたりできるかなと思ってアクティビティ図を作ってPDFにしてみました。 元の編集可能なExcelファイルも良ろしければどうぞ。
サーバー負荷特定チャート図
図を見てもらうとわかりますが、ボトルネックがCPUかディスクかで大きく切り分けられるようになっています。 それを計測するために「sarコマンド」や「vmstatコマンド」などを利用していきます。
また「psコマンド」や「top」コマンド自体は知っていても、それをどう使えば負荷特定に至るのかなど、ほんとに実用的な利用方法が書いてあります。
そのままでも使ってもらっていいですが、本を読みながらや、読んでから見るともっとよく分かるようになるんではないかなと思います。
2009-08-05