すべてのプロダクト
Search
ドキュメントセンター

:Linux インスタンスの高負荷のトラブルシューティング

最終更新日:Nov 13, 2025

症状

  • 応答が遅い: Secure Shell Protocol (SSH) コマンドが遅延します。Web サイトまたは API へのアクセスが遅いか、タイムアウトします。

  • メトリックが高い: CPU、メモリ、ディスク I/O のメトリックが常に 80% を超えます。

  • サービスの中断: メモリ不足 (OOM) エラーにより、システムが重要なプロセスを終了し、インスタンスが自動的に再起動します。

  • ログインの失敗: SSH 接続が拒否されます。

原因

  • アプリケーションの問題: アプリケーションコードにパフォーマンスボトルネックまたはメモリリークがあります。

  • トラフィックの急増: 同時アクセスがインスタンスの処理能力を超えています。

  • I/O ボトルネック: ディスクの読み取りおよび書き込み操作が飽和状態になり、CPU の iowait が高くなります。

ソリューション

ステップ 1: htop を使用して異常なプロセスを迅速に特定する

  1. VNC 接続を使用して ECS インスタンスにログインします。

    1. ECS コンソール - インスタンスに移動します。上部のナビゲーションバーで、ターゲットリージョンとリソースグループを選択します。

    2. ターゲットインスタンスの詳細ページに移動します。[接続] をクリックし、[VNC] を選択します。ユーザー名とパスワードを入力して ECS インスタンスにログインします。

  2. htop をインストールして実行します。

    sudo yum install -y htop
    htop
  3. htop インターフェイスで出力を分析します。

    • CPU 消費量が多いプロセスを見つけるには、F6 キーを押し、PERCENT_CPU で降順にソートします。

    • メモリ消費量が多いプロセスを見つけるには、F6 キーを押し、PERCENT_MEM で降順にソートします。

ステップ 2: sar を使用してリソースのボトルネックを診断する

htop を使用して症状を特定した後、sar を使用して定量的なデータを取得し、ボトルネックが CPU、メモリ、または I/O であるかどうかを確認します。

  1. sysstat をインストールして有効にします。

    sudo yum install -y sysstat
    systemctl start sysstat && systemctl enable sysstat
  2. ターゲットを絞った分析を実行します。

    • CPU 使用率 (sar -u) を分析して、CPU 時間がどこで費やされているかを確認します。

      # 1 秒に 1 回、合計 5 回データを収集します
      sar -u 1 5
      • %user が高い: アプリケーションの問題を示します。

      • %system が高い: カーネルまたは I/O の呼び出しが頻繁であることを示します。

      • %iowait が常に 20% を超える: ディスク I/O のボトルネックを示します。

    • システム負荷 (sar -q) を分析して、システムのビジー状態を測定します。

      # 2 秒に 1 回、合計 5 回データを収集します
      sar -q 2 5
      • ldavg-1 が CPU コア数より大きい: システムが過負荷状態です。

      • runq-sz が高い: 多くのプロセスが CPU を待機しているキューにあります。

    • メモリとスワップのアクティビティ (sar -rsar -W) を分析して、メモリが枯渇しているかどうかを判断します。

      # メモリ使用量を分析します
      sar -r 1 3
      # スワップアクティビティ (スワップ) を分析します
      sar -W 1 3
      • pswpin/s または pswpout/s が常に 0 より大きい: 物理メモリが不足しており、システムがディスクにスワップしています。これにより、パフォーマンスが低下します。

    • ディスク I/O (sar -d) を分析して、ディスクパフォーマンスのボトルネックを特定します。

      # 特定のディスクを分析するために、1 秒に 1 回、合計 3 回データを収集します
      sar -d 1 3
      • %util が 100% に近い: ディスク I/O が飽和状態です。

      • await が 20 ms より大きい: I/O リクエストの処理時間が長すぎます。

ステップ 3: ターゲットを絞ったソリューションと最適化を適用する

  • CPU 消費量が多いアプリケーションプロセスの場合:

    • コードの最適化: perf (C/C++) や jstack (Java) などのツールを使用して、ホットスポットコードを特定し、最適化します。

    • ロジックの最適化: 無限ループや全表スキャンを実行する SQL クエリなどの非効率な操作を確認して修正します。

  • メモリ不足または頻繁なスワッピングの場合:

    • リークの調査: valgrind (C/C++) や jmap (Java) などのツールを使用して、メモリリークを分析します。

    • 構成の調整: Java 仮想マシン (JVM) の -Xms-Xmx パラメーターなど、アプリケーションのメモリパラメーターを構成します。

    • リソースのアップグレード: インスタンスタイプを変更して物理メモリを増やします。詳細については、「インスタンスタイプの変更の概要」をご参照ください。

  • ディスク I/O が高い: 詳細については、「Linux システムでのディスク I/O 負荷が高い場合のトラブルシューティング」をご参照ください。

次のステップ

  • 監視とアラートの設定: CPU、メモリ、負荷、ディスクなどの主要なメトリックにアラートのしきい値を設定して、早期警告を受け取ります。

  • Auto Scaling の計画: Web アプリケーションなど、変動のあるワークロードの場合、トラフィックの変更に応じてインスタンスを自動的に追加または削除するように Auto Scaling ポリシーを構成します。