このトピックでは、Linux Elastic Compute Service (ECS) インスタンスで発生する高負荷の問題をトラブルシューティングして解決する方法について説明します。 高負荷の問題により、インスタンスのパフォーマンスの低下、インスタンスの自動シャットダウン、インスタンスの自動再起動、ログオンの失敗など、さまざまな例外が発生する可能性があります。
問題の説明
ECSインスタンスを使用すると、インスタンスで次の高負荷の問題が発生する可能性があります。
高いCPU使用率または高いCPU負荷: この問題は、CPU使用率が80% 以上になると発生します。 CPU使用率が高いままの場合、インスタンスのパフォーマンスの低下、インスタンスの自動シャットダウン、インスタンスの自動再起動、ログオンの失敗などの問題が発生する可能性があります。
高帯域幅使用率: この問題は、帯域幅使用率が80% 以上になると発生します。 帯域幅の使用率が高いままである場合、インスタンスのネットワーク接続またはネットワークスループットが影響を受けます。 たとえば、インスタンスを接続できないか、ネットワーク速度が遅い場合などです。
メモリ使用量が多い: この問題は、メモリ使用量が80% 以上になると発生します。 メモリ使用量が高いままである場合、システムのスタッターや応答の遅延などの問題が発生する可能性があります。
I/O使用率: この問題は、ディスクのI/O使用率が80% 以上になると発生します。 I/Oの使用率が高いと、ファイルの読み取り /書き込み操作の遅延、アプリケーションのパフォーマンスの低下、アプリケーションエラーなどの問題が発生する可能性があります。
トラブルシューティング
System Activity Reporter (SAR) またはhtopを使用して、高負荷の問題を特定し、Linuxインスタンスのリソース使用量を確認できます。
SARを使用してインスタンスのリソース使用量を確認する
SARは、システムアクティビティに関する統計を収集し、統計を計算することによってシステムの動作状態を表示します。 SARは、大量のシステム活動データを継続的に収集できます。 SARは、収集されたデータを分析し、データおよび分析結果をファイルに格納するため、負荷が低い。
SARは、Linuxシステムのパフォーマンスを分析するために使用されるユーティリティプログラムです。 SARは、ファイルの読み取り /書き込み操作、システムコール、シリアルポートアクティビティ、CPUアクティビティ、メモリ使用量、プロセスアクティビティ、プロセス間通信など、さまざまなシステムアクティビティを監視および報告するオールインワン監視ツールです。
SARのインストール
SARがLinuxインスタンスにインストールされていない場合は、次の手順を実行してSARをインストールします。
Virtual Network Computing (VNC) を使用してLinuxインスタンスに接続します。
詳細については、「VNCを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行してSARをインストールします。
yum install sysstat
次のコマンドを実行して、sysstatサービスを開始します。
systemctl start sysstat
次のコマンドを実行して、sysstatサービスのステータスを確認します。
systemctl status sysstat
sysstatサービスが起動されている場合, コマンド出力に
Active: active (exited)
が含まれます。
CPU使用率のチェック
次のコマンドを実行して、CPU負荷を確認します。
sar -u 1 5 #Refresh once every second for five times.
次のようなコマンド出力が表示されます。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:16:35 AM CPU %user %nice %system %iowait %steal %idle
10:16:36 AM all 14.14 0.00 1.01 0.00 0.00 84.85
10:16:37 AM all 14.14 0.00 0.00 1.01 0.00 84.85
10:16:38 AM all 0.00 0.00 1.01 0.00 0.00 98.99
10:16:39 AM all 0.00 0.00 0.00 0.00 0.00 100.00
10:16:40 AM all 1.00 0.00 0.00 0.00 0.00 99.00
Average: all 5.86 0.00 0.40 0.20 0.00 93.54
コマンド出力のフィールド:
% user: ユーザーモードで消費されたCPU時間の割合。
% nice: nice値を使用してスケジューリング優先度を変更したユーザーモードのプロセスが消費したCPU時間の割合。
% system: システムモードで消費されたCPU時間の割合。
% iowait: CPUがアイドル状態で、ディスクI/Oの完了を待機している時間の割合。
% steal: Xenなどのオペレーティングシステム仮想化テクノロジを使用して、他のvCPUがコンピューティングを完了するのを待つ時間の割合。
% idle: CPUアイドル時間の割合。
キュー長とCPU負荷平均の確認
次のコマンドを実行して、キューの長さとCPU負荷平均を表示します。
sar -q 1 10 #Refresh once every second for 10 times.
次のようなコマンド出力が表示されます。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:23:13 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
10:23:14 AM 0 142 0.00 0.01 0.05 0
10:23:15 AM 0 142 0.00 0.01 0.05 0
10:23:16 AM 0 142 0.00 0.01 0.05 0
10:23:17 AM 0 142 0.00 0.01 0.05 0
10:23:18 AM 0 142 0.00 0.01 0.05 0
10:23:19 AM 0 142 0.00 0.01 0.05 0
Average: 0 142 0.00 0.01 0.05 0
コマンド出力のフィールド:
runq-sz: 実行キューの長さ。実行中のプロセス数を示します。
plist-sz: プロセスリスト内のプロセスとスレッドの数。
ldavg-1: 前の1分間のシステム負荷の平均。
ldavg-5: 前の5分間のシステム負荷の平均。
ldavg-15: 過去15分間のシステム負荷の平均。
ディスク使用量の確認
次のコマンドを実行して、ディスクの読み取り /書き込み負荷を確認します。
sar -d 1 3 # Refresh once every second for three times.
次のようなコマンド出力が表示されます。
Linux 5.10.134-13.al8.x86_64 (iZ2zegjvrdtgifd77gadyqZ) 03/09/2023 _x86_64_ (8 CPU)
02:41:04 PM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
02:41:05 PM dev253-0 1.00 0.00 4.00 4.00 0.00 0.00 1.00 0.10
02:41:06 PM dev253-0 1.00 0.00 4.00 4.00 0.00 1.00 1.00 0.10
02:41:07 PM dev253-0 1.00 0.00 4.00 4.00 0.00 0.00 2.00 0.20
02:41:08 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:41:09 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev253-0 0.60 0.00 2.40 4.00 0.00 0.33 1.33 0.08
コマンド出力のフィールド:
tps: 1秒あたりの転送数。
rd_sec/s: 1秒あたりの読み取りセクタ数。
wr_sec/s: 1秒あたりに書き込まれるセクタ数。
avgrq-sz: I/O操作あたりのデータの平均サイズ (セクタ単位) 。
avgqu-sz: ディスクに発行されたリクエストの平均キュー長。
await: I/Oリクエストが処理される平均時間 (ミリ秒単位) 。 これには、キュー内の要求によって費やされた時間と、要求を処理するのに費やされた時間が含まれます。
svctm: I/Oリクエストあたりの平均サービス時間 (ミリ秒) 。
% util: I/Oリクエストが発行されたCPU時間の割合。 より高い値は、より低いI/Oレートを示す。
メモリ負荷の確認
次のコマンドを実行して、メモリ負荷を確認します。
sar -r 1 3 # Refresh once every second for three times
次のようなコマンド出力が表示されます。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:27:34 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:27:35 AM 275992 740664 72.85 181552 315340 362052 35.61 471216 115828 60
10:27:36 AM 276024 740632 72.85 181552 315340 362052 35.61 471220 115828 64
10:27:37 AM 276024 740632 72.85 181552 315340 362052 35.61 471220 115828 64
Average: 276013 740643 72.85 181552 315340 362052 35.61 471219 115828 63
コマンド出力のフィールド:
kbmemfree: バッファ領域とキャッシュ領域を除く、使用可能な空きメモリの量 (キロバイト単位) 。 kbmemfreeは、freeコマンドの出力の空き列と同じです。
kbmemused: バッファ領域とキャッシュ領域を除く、使用されたメモリの量 (キロバイト) 。 kbmemusedはfreeコマンドの出力のused列と同じです。
% memused: メモリの総量に対する使用済みメモリの割合。 メモリの総量には、スワップメモリの量は含まれません。
kbbuffersおよびkbcached: freeコマンドの出力のバッファ列およびキャッシュ列に対応します。
kbcommit: 現在のワークロードに必要なメモリ量 (キロバイト) 。 これは、メモリ不足の問題を防ぐために必要なRAMとスワップメモリの総量の概算です。
% commit: RAMとスワップメモリの合計量に対する、現在のワークロードに必要なメモリの割合。
I/Oロードの確認
次のコマンドを実行して、I/O負荷を確認します。
sar -b 1 10 # Refresh every second for 10 times
次のようなコマンド出力が表示されます。
Linux 5.10.134-13.al8.x86_64 (iZ2zegjvrdtgifd77gadyqZ) 03/09/2023 _x86_64_ (8 CPU)
02:34:00 PM tps rtps wtps bread/s bwrtn/s
02:34:01 PM 6.00 0.00 6.00 0.00 80.00
02:34:02 PM 55.00 0.00 55.00 0.00 632.00
02:34:03 PM 1.00 0.00 1.00 0.00 8.00
02:34:04 PM 0.00 0.00 0.00 0.00 0.00
02:34:05 PM 0.00 0.00 0.00 0.00 0.00
02:34:06 PM 2.00 0.00 2.00 0.00 136.00
02:34:07 PM 82.00 0.00 82.00 0.00 888.00
02:34:08 PM 0.00 0.00 0.00 0.00 0.00
02:34:09 PM 0.00 0.00 0.00 0.00 0.00
02:34:10 PM 0.00 0.00 0.00 0.00 0.00
Average: 14.60 0.00 14.60 0.00 174.40
コマンド出力のフィールド:
tps: 1秒あたりに物理デバイスに発行された転送の総数。
rtps: 1秒あたりに物理デバイスに発行された読み取り要求の総数。
wtps: 1秒間に物理デバイスに発行された書き込み要求の総数。
bread/s: 物理デバイスから読み取られたデータの合計量 (ブロック /秒) 。
bwrtn/s: 物理デバイスに書き込まれるデータの合計量 (ブロック /秒) 。
スワップ活動の確認
次のコマンドを実行して、スワップアクティビティを確認します。
sar -W 1 3
次のようなコマンド出力が表示されます。
Linux 3.10.0-123.9.3.el7.x8664 (iZ23pddtofdZ) 07/04/2016 _x86_64 (1 CPU)
10:28:59 AM pswpin/s pswpout/s
10:29:00 AM 0.00 0.00
10:29:01 AM 0.00 0.00
10:29:02 AM 0.00 0.00
Average: 0.00 0.00
コマンド出力のフィールド:
pswpin/s: システムが1秒あたりに取り込んだスワップページの数。
pswpout/s: システムが1秒間に持ち出したスワップページの数。
共通sarコマンドパラメータ
sarコマンドでは、大文字と小文字が区別される次のパラメーターが使用されます。
-A: 収集したすべての統計を報告します。
-a: ファイルの使用を報告します。
− B: 追加のバッファ活動を報告する。
-b: バッファ活動を報告します。
-c: システムコールを報告します。
-d: ディスクのアクティビティを報告します。
-g: ページアウトとメモリ解放活動を報告します。
-h: バッファ活動に関する概要統計を報告します。
-m: 1秒あたりのメッセージ操作 (送信と受信) の数、1秒あたりのセマフォ操作の数など、プロセス間の通信アクティビティを報告します。
-n: 名前付きキャッシュの使用状況を報告します。
-p: ページインアクティビティを報告します。
-g: 実行キューとスワップキューの平均長を報告します。
-R: プロセス活動を報告します。
-r: 現在使用されていないメモリページとディスクブロックの数を報告します。
-u: CPU使用率統計をレポートします。
-v: プロセステーブル、inodeテーブル、ファイルテーブル、ロックテーブルのステータスを報告します。
-w: アクティビティの交換と切り替えを報告します。
-y: テレタイプライター (TTY) デバイスのアクティビティを報告します。
htopを使用してオペレーティングシステムのプロセスの負荷を表示する
htopは、LinuxでのCPU、メモリ、スワップの使用量と負荷の平均値を視覚的に表示するインタラクティブなツールです。
Linuxインスタンスに接続します。
詳細については、「接続方法」をご参照ください。
次のコマンドを実行してhtopをインストールします。
yum install htop
次のコマンドを実行してhtopを開始します。
htop
htopでシステムロードを表示します。
htopインターフェイスを次の図に示します。 インターフェイスは次のセクションで構成されています。
①: 左側にCPU使用率、メモリ使用率、スワップ使用率が表示され、右側にプロセスの総数、負荷平均、稼働時間が表示されます。
②: すべてのプロセスの使用状況が表示されます。 CPU % またはMEM % をクリックすると、CPU使用率またはメモリ使用率でプロセスを並べ替え、CPU使用率またはメモリ使用率が高いプロセスを特定できます。
③: ファンクションキーF1〜F10が表示される。