どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付いたします

サーバ負荷の原因を探る方法


インフラエンジニアの伊藤です。

前回、サーバの負荷が上がったときに確認する「ロードアベレージ」というものをご紹介しました。
ロードアベレージでサーバの負荷を確認する ? ビヨンドブログ

ロードアベレージは、処理待ちのプロセスを表したものになります。
数値が高ければ高いほど処理待ちのプロセス数が多く、「負荷が高い」という状況になります。

今回は、なぜ負荷が高いという状況になるのか?の原因を探っていきたいと思います。

原因は大きく分けて2つある

ロードアベレージが高い状況が起こる原因は基本的に大きくわけて2つあります。

  • CPUの処理が追いつかない
  • ディスクI/Oの処理が追いつかない

では、それぞれが原因であるときの探り方を説明していきたいと思います。

CPUが原因の場合

まずはtopコマンドなどでCPUの使用率を見てみます。注目すべきは以下2つの値です。

%user ユーザプロセスが使用しているCPU使用率
%system システム(カーネル)が使用しているCPU使用率

一般的なプロセスがCPUに負荷がかかる場合は、だいたいユーザモード(%user)のCPU使用率が高くなっているはずです。

また、ユーザモードのプロセスは、大量のプロセスを動作させていたりする場合は、プロセスの切り替え等を行います。
その「プロセスの切り替え」を行う際にカーネルモード(%system)のCPUを使うので、
プロセスの切り替えが多いプログラムに関してはカーネルモードのCPU使用率が高くなっているでしょう。

stress-user_022516_092215_PM
ユーザモードのCPU使用率が高い場合

stress-system_022516_092244_PM
カーネルのCPU使用率が高い場合

ディスクI/Oが原因の場合

ディスクI/Oが原因の場合は、topで以下について注目してみます。

%iowait ディスクI/Oが必要な場合のプロセスがアイドル状態である
SWAP メモリを使用しつくして、HDDをメモリ代わりに使用している量

iowaitの値は、ディスクからデータを読み書きを大量に行っている際に高くなることが多いです。
例えばDBサーバでデータベースへのアクセスが多いサーバは、iowaitの値が高くなりやすいです。

SWAPは、プロセスがメモリを全て使用してしまった場合にHDDをメモリ代わりに使用している容量になります。
SWAPを使う例としては、Webサーバなどで、大量にアクセスがあった場合にメモリを確保していってSWAPを使用することがあります。

SWAPを使用している場合、メモリの代わりにHDDを使用する=ディスクI/Oで負荷が高まるため、サーバの速度としては遅くなります。

stress-disk_022516_092255_PM
iowaitが高く、ディスクI/Oが原因で負荷が高い場合

stress-swap
SWAPを使用している場合

調査していく

これで、CPUが原因か、I/Oが原因かがわかるようになると思います。
更にpsコマンド等でどのプロセスがCPUを使用しているか(SWAPの場合はメモリを使用しているか)を探っていきます。

ユーザモードのCPU使用率が高い場合には、I/O等で問題がないので、
CPUの性能を上げるか、プログラム的な見直しが必要になるかもしれません。

ディスクI/O側に問題がある場合は、メモリ増設を行ったり、
プログラム側でディスクI/Oではなくメモリの空きがある場所で一旦処理をさせるといった見直しが必要があるかもしれません。

また、ロードアベレージが低いけど処理が遅い場合があるかもしれません。
その場合にはソフトウェアの設定や、ネットワークの処理が問題になっている可能性があります。

まずは「負荷が高い」という問題に直面したときは、落ち着いて
どの部分に負荷がかかっているかを特定していくことが、解決への第一歩になるでしょう。


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.