by shigemk2

当面は技術的なことしか書かない

サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 1 ボトルネックを見極める

前回
サーバ/インフラを支える技術3 4 VLANの導入 - by shigemk2

負荷分散は複数のホストに処理を担当させる技術なので、
1台のマシンで処理できるはずの負荷を10台で分散さすのは
本末転倒である(台数を増やすのは経済的なコストもかかる)。
そのため、1台のサーバの性能を十分に引き出すことが出来て
はじめて負荷分散が意味を成すのである。

webアプリケーションの負荷分散は、多くの場合
ディスクI/Oの分散と軽減の作業である。

プログラマの世界には有名な至言がある。

「推測するな、計測せよ」

これは負荷分散の世界でも例外ではない。
その対象となるのは、OSすなわちLinuxカーネルであり、
負荷を知るための情報のほぼ全てを持ち合わせている。

Linuxでは、ps、top、sarなどを利用する

ボトルネックを見極めるための作業を大きく分けると、2つ。

topかuptimeを実行してロードアベレージを見る。
ただし、ロードアベレージだけではボトルネックの原因までは
分からない。

またロードアベレージは低いのにシステムのスループット
上がらない場合もあるので、その場合はソフトウェアの不具合や設定、
ネットワークやリモートホストなどに原因がないかを探る。

ロードアベレージが高かった場合、sarやvm_statなどで、CPU使用率や
I/O待ち率の推移を確認出来るのでそれを参考に見極める

CPU負荷率が高い場合

  • ユーザプログラムの処理がボトルネックなのか、システムプログラムが原因なのかを見極めるためtop sarを使う
  • psを使って、原因となっているプロセスを探す
  • プロセスの特定からさらに詳細を詰める場合は、straceでトレースしたりoprofileでプロファイリングをするなりしてボトルネック箇所を絞り込む
  • CPUに負荷がかかっているのはディスクやメモリ容量などそのほかの部分がボトルネックになっていない、いってみれば理想的な状態
  • プログラムが暴走してCPUに必要以上の負荷がかかっている

I/O負荷が高い場合

  • 特定のプロセスが極端にメモリを消費していないかpsで確認
  • プログラムの不具合でメモリを使い過ぎている場合は、プログラムを改善
  • 搭載するメモリが不足している場合はメモリ増設で対応する。メモリが増設できない場合は分散を検討する

また

  • メモリ増設でキャッシュ領域を拡大できるなら、メモリを増設する
  • メモリ増設で対応しきれないときはキャッシュサーバやデータの分散などを検討する(もちろんプログラムの改善も検討するべし)

次回
サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 2 負荷とは何か - by shigemk2

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)