ロードアベレージが高いのですが、CPUもディスクIOも低く、これはどういったことが原因なんだろうと悩んでいます。
topやsar等の結果は以下の感じです。
VPSサーバーでapache mysql phpが動いていて、mysqlはほとんど使っていなくて、apacheが原因ということはわかっています。
apacheのプロセスがたくさん作られています。PV等からもうスペック不足だなとは思っていて近々サーバーを引っ越すのですが、
これの原因をつきとめてすっきりさせたいところです。http.confをいじれば解決する問題なのでしょうか?
本やブログなどを読んでもロードアベレージの原因はCPUかディスクIOであると書かれていてそう思っていたんですが、この状態だと納得できません。よろしくお願いします。
load average: 10.78, 18.97, 20.37
Cpu(s): 2.9%us, 1.8%sy, 0.0%ni, 95.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1572864k total, 587936k used, 984928k free, 0k buffers
06:20:01 PM CPU %user %nice %system %iowait %steal %idle
06:30:01 PM all 5.53 0.00 3.37 0.01 0.00 91.10
06:40:01 PM all 3.40 0.00 2.12 0.00 0.00 94.48
03:20:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
06:40:01 PM 776820 796044 50.61 0 0 0 0 0.00 0
06:50:01 PM 709144 863720 54.91 0 0 0 0 0.00 0
07:00:01 PM 914668 658196 41.85 0 0 0 0 0.00 0
No.3ベストアンサー
- 回答日時:
「ニワトリとたまご」問題的な勘違い(結果と原因の取り違え)をしていないか、
ちょっと気になりました。
まずは、前提知識から確認させてください。
1.ロードアベレージは何の数値なのか?
ロードアベレージとは、実行可能待ちプロセスの数です。
窓口(CPU)の前で待たされている人(プロセス)が多いことを示しているだけです。
よく言われるのは、
「CPU負荷やディスクIOが高いと、左記の状態の影響で、実行可能待ちプロセス数が増加し、
ロードアベレージが高くなる」
つまり、
"原因:CPU負荷、ディスクIOが高い"→"結果:ロードアベレージが高い"
という話であり、原因と結果と取り違えないよう注意して下さい。
インターネット上でも、よく勘違いしている人がいます。
次に、今回の現象の原因分析について
2.ロードアベレージが高い原因は何なのか?
"ロードアベレージ"="実行可能待ちプロセスの数"なので、
>apacheのプロセスがたくさん作られています
ということが直接原因の可能性が濃厚です。
apacheのプロセスがたくさんある
→たくさんのプロセスが窓口(CPU)前で待たされている
→ロードアベレージが高くなる
という考え方です。
3.「apacheのプロセスがたくさん作られている」原因は何か?
"apacheのプロセス(窓口)"がたくさん作られている原因ですが、
ア.大量HTTPリクエストを処理するために"apacheのプロセス(窓口)"がたくさん必要。
という処理量に起因する原因。
イ.一つ一つのHTTPリクエスト処理に時間が掛かっているため、
"apacheのプロセス(窓口)"がたくさん必要。
という処理の特徴に起因する原因。
と2通りが考えられます。
今回の場合は、localicaさんの回答にあるとおり、
イのパターンの原因でしょうね。
>CPUの負荷が低い割りにキューの処理が遅い理由は1つ1つのジョブに
>時間が掛かっていると思われます。
>従って、1つ1つのジョブに時間を要する理由が原因と思われます。
イのパターンの場合、
サーバ更新で処理能力を増強するとしても、
ボトルネックを明らかにして、ボトルネック部分を性能増強しないと性能向上は見込めません
例えば、WEBサーバのCPU能力は今でも十二分に足りており、
これを増強しても性能向上は見込めません。
また、アプリケーションの性能不具合が原因で待ちが発生している場合、
サーバ処理能力を向上させても、問題解決にはなりません。
アプリケーションの性能不具合の具体としては、
・DB排他ロック待ち
・ファイル排他ロック待ち
・DBテーブルへのアクセスプランが最適化されていない
(インデックスを利用していない、全文検索を行っている等)
・DBMS(mysql)の各種キャッシュが枯渇している
などがあります。
このアプリケーションの性能不具合を修正するには、
ボトルネック部分を明らかにした上で
プログラム改修やDBMS(mysql)の設定修正が必要になります。
一度、アプリケーションの性能不具合が発生していないか、
専門家に分析してもらうことをオススメします。
ありがとうございます。
勘違いはしていないと思ってます(笑)
ただ、ロードアベレージの概念はわかっていたつもりでしたが、たいていCPUやディスクIOが原因で~~~みたいな書かれ方で、それらを調べる方法しか書かれていなかったものなので、自分の中で仮説はあったんですが、いまいち自信が持てずサーバー移転の前に原因をはっきりわかりたいと考えていました。
サーバー移転も行い、その後は一応負荷があがることなく動いていますが、お二人のお話を聞いて原因の目処はたちました。
データベースがやはりレスポンスが悪そうです。主にテーブルロックとインデックスの問題だと思います。
今後はデータベースのチューニングをしていこうかと思います。
皆さんありがとうございました。
No.2
- 回答日時:
>apacheが原因ということはわかっています。
なぜapacheが原因と思われるのでしょうか?
apacheが原因ならそこを見直しては?
>apacheのプロセスがたくさん作られています
たくさんっていくつでしょうか?
>ロードアベレージの原因はCPUかディスクIOであると書かれていて
一般論で言えば上記通りですが、他のIOは思い浮かびませんか?
CPUの負荷が低い割りにキューの処理が遅い理由は1つ1つのジョブに時間が掛かっていると思われます。
従って、1つ1つのジョブに時間を要する理由が原因と思われます。
以下は勝手な推測ですが、Webサービスのロジックがネットワーク、或いはDBの応答を待っているのではありませんか?
仮にネットワーク越しに値を取得してから処理するようなロジックでは相当にパフォーマンスが悪いでしょうし、MySQLに無駄な処理をさせていませんか?
後はネットワーク帯域の問題の可能性もあります。
いずれもきちんとボトルネックを計測すればある程度推論は立つと思います。
時間が無いので中途半端な回答になりましたが、ログ解析をお勧めします。
この回答への補足
>apacheが原因ということはわかっています。
>apacheのプロセスがたくさん作られています
ロードアベレージが高くなる時はapacheのプロセスが多くなっています。
たしか100以上はあったはずです。
>以下は勝手な推測ですが、Webサービスのロジックがネットワーク、或いはDBの応答を待っているのではありませんか?
たしかにその可能性はあります。ネットワークはともかくDBの可能性は否定できません。
この質問の以前にDBも同じサーバー内にあったのですが、DBのCPU使用率が高く、ロードアベレージの高い原因はDB
だと考え(決めつけて)、WEBサーバーから切り離したんですが、結局あまり変わらなかったという経緯があります。
確かにリクエストがあると基本DBに何回も問い合わせするページがあるので、まずはその辺を疑ってみたいと思います。
>時間が無いので中途半端な回答になりましたが、ログ解析をお勧めします。
時間がない中ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
IISがフリーズ
-
タスクマネージャーのプロセス...
-
explorer.exeが異様にメモリを食う
-
SendMessageが失敗するときがある
-
vb.netでEXCEL起動がうまくでき...
-
VB.NET 自プログラムのプロセス...
-
VB6.0 SHELLで起動...
-
WSH.Runで待機できません
-
ADOでアクセスのレコードに...
-
プロセスのアタッチ・デタッチ...
-
フレームワークとプロセスの違...
-
powershellでプロセスIDの変数化
-
ロードアベレージが高いのです...
-
c言語でプロセスIDを調べたい
-
C++のプログラムをバックグラウ...
-
GPLによるソース公開の回避方法
-
API関数 GetExitCodeProcess
-
タスクマネージャーのプロセス...
-
C言語のプログラミングで困って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
タスクマネージャーのプロセス...
-
explorer.exeが異様にメモリを食う
-
プロセスのアタッチ・デタッチ...
-
C#でのbatファイル実行結果取得
-
プロセスIDからウィンドウハ...
-
VB6.0 SHELLで起動...
-
非表示になったエクセルは?
-
SendMessageが失敗するときがある
-
ADOでアクセスのレコードに...
-
c言語でプロセスIDを調べたい
-
Process.Startの戻り値を後で取得
-
OSPFでプロセスを分ける意義に...
-
セマフォとmutexの違いは?
-
Visual C++からpingを実行して...
-
プロセスIDの取得方法について
-
Linuxでのスレッド間メッセージ...
-
怪しいプロセス教えてください。
-
ウィンドウのタイトルからプロ...
-
別のプロセスの関数を呼び出す...
おすすめ情報