サーバー負荷が高くなる原因とは。負荷がかかっている部分を特定する方法を解説
インフラエンジニアの伊藤です。
前回、サーバーの負荷が上がったときに確認する「ロードアベレージ」というものをご紹介しました。
ロードアベレージでサーバーの負荷を確認する ? ビヨンドブログ
ロードアベレージは、処理待ちのプロセスを表したものになります。
数値が高ければ高いほど処理待ちのプロセス数が多く、「負荷が高い」という状況になります。
今回は、なぜ負荷が高いという状況になるのか?の原因を探っていきたいと思います。
原因は大きく分けて2つある
ロードアベレージが高い状況が起こる原因は基本的に大きくわけて2つあります。
- CPUの処理が追いつかない
- ディスクI/Oの処理が追いつかない
では、それぞれが原因であるときの探り方を説明していきたいと思います。
CPUが原因の場合
まずはtopコマンドなどでCPUの使用率を見てみます。注目すべきは以下2つの値です。
%user | ユーザプロセスが使用しているCPU使用率 |
%system | システム(カーネル)が使用しているCPU使用率 |
一般的なプロセスがCPUに負荷がかかる場合は、だいたいユーザモード(%user)のCPU使用率が高くなっているはずです。
また、ユーザモードのプロセスは、大量のプロセスを動作させていたりする場合は、プロセスの切り替え等を行います。
その「プロセスの切り替え」を行う際にカーネルモード(%system)のCPUを使うので、
プロセスの切り替えが多いプログラムに関してはカーネルモードのCPU使用率が高くなっているでしょう。
ユーザモードのCPU使用率が高い場合
カーネルのCPU使用率が高い場合
ディスクI/Oが原因の場合
ディスクI/Oが原因の場合は、topで以下について注目してみます。
%iowait | ディスクI/Oが必要な場合のプロセスがアイドル状態である |
SWAP | メモリを使用しつくして、HDDをメモリ代わりに使用している量 |
iowaitの値は、ディスクからデータを読み書きを大量に行っている際に高くなることが多いです。
例えばDBサーバーでデータベースへのアクセスが多いサーバーは、iowaitの値が高くなりやすいです。
SWAPは、プロセスがメモリを全て使用してしまった場合にHDDをメモリ代わりに使用している容量になります。
SWAPを使う例としては、Webサーバーなどで、大量にアクセスがあった場合にメモリを確保していってSWAPを使用することがあります。
SWAPを使用している場合、メモリの代わりにHDDを使用する=ディスクI/Oで負荷が高まるため、サーバーの速度としては遅くなります。
iowaitが高く、ディスクI/Oが原因で負荷が高い場合
SWAPを使用している場合
原因調査していく
これで、CPUが原因か、I/Oが原因かがわかるようになると思います。
更にpsコマンド等でどのプロセスがCPUを使用しているか(SWAPの場合はメモリを使用しているか)を探っていきます。
ユーザモードのCPU使用率が高い場合には、I/O等で問題がないので、
CPUの性能を上げるか、プログラム的な見直しが必要になるかもしれません。
ディスクI/O側に問題がある場合はメモリ増設を行ったり、プログラム側でディスクI/Oではなくメモリの空きがある場所で一旦処理をさせる、といった見直しが必要があるかもしれません。
また、ロードアベレージが低いけど処理が遅い場合があるかもしれません。
その場合にはソフトウェアの設定や、ネットワークの処理が問題になっている可能性があります。
まずは「負荷が高い」という問題に直面したときは、落ち着いてどの部分に負荷がかかっているかを特定していくことが、解決への第一歩になるでしょう。
クラウドのプロに相談したい場合
弊社ビヨンドでは、創業以来、マルチクラウドインテグレーター・マネージドサービスプロバイダー(MSP)として培った技術力で、AWS や GCP・Azure・Oracle Cloud など、様々なクラウドサーバーのプラットフォームを駆使した設計・構築・移行を行ってきました。
お客様が求めるシステムやアプリケーションの仕様・機能に応じて、お客様向けに最適化された、オーダーメイド型のクラウドサーバー環境をご提供いたしますので、クラウドにご興味のある方はお気軽にお問い合わせください。
● クラウド / サーバー設計・構築
● クラウド / サーバー移行・マイグレーション
● クラウド / サーバー運用保守・監視(24時間365日)