問題の説明
Elastic Compute Service (ECS) インスタンスでホストされているウェブサイトやアプリケーションの応答が遅い、タイムアウトする、または I/O 関連のエラーログが表示される。
インスタンスの IOPS、スループット、またはデバイス使用率 (
%util) のメトリックが過度に高い。
原因
高い I/O 消費プロセス:インスタンス上のプロセス (データベースの読み書き、大量のログ書き込み、バックアップジョブなど) が多くのディスク読み書きリクエストを生成し、ディスクの I/O 帯域幅全体を消費している。
ディスクのパフォーマンスボトルネック:現在のビジネスにおける通常の I/O 要求が、インスタンスにアタッチされているディスクのパフォーマンス上限 (IOPS またはスループット) を超えている。
解決策
iostat を使用してディスクのボトルネックを確認し、次に iotop を使用して特定のプロセスを特定します。最後に、必要に応じてリソースを最適化またはスペックアップします。
ステップ 1:ディスク I/O ボトルネックの確認
ECS インスタンスにログインします。
[ECS コンソール - インスタンス]に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページで、[接続] をクリックして [ワークベンチ] を選択します。画面の指示に従ってターミナルにログインします。
iostatを使用してディスクの I/O ステータスをモニターします。sysstat パッケージをインストールします。
Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y sysstatUbuntu / Debian
sudo apt install -y sysstatopenSUSE
sudo zypper install -y sysstatiostatを実行して、2 秒ごとにデータをリフレッシュします。iostat -d -x -k 2
iostatの出力を分析します。次のメトリックに注意してください:r/s、w/s:1 秒あたりの読み取りおよび書き込みリクエスト数 (IOPS)。rkB/s、wkB/s:1 秒あたりの読み取りおよび書き込みデータ量 (スループット)。%util:ディスクの I/O 使用率。この値が常に 100% に近い場合、ディスクデバイスは飽和状態です。
ステップ 2:高い I/O を消費しているプロセスの特定
ディスク I/O が飽和状態であることを確認したら、高い負荷を引き起こしているプロセスを特定する必要があります。
iotopを使用して、プロセスの I/O アクティビティをリアルタイムで表示します。iotopをインストールします。Alibaba Cloud Linux / CentOS / Fedora
sudo yum install -y iotopUbuntu / Debian
sudo apt install -y iotopopenSUSE
sudo zypper install -y iotopアクティブな I/O プロセスを表示します。
sudo iotop -o
iotopの出力を分析します。プロセスの特定:
DISK WRITEまたはDISK READ列で最も I/O が高いプロセスを見つけます。追加のコンテキスト:
IO>列は、プロセスが I/O を待機している時間の割合を示します。
ステップ 3:異常なプロセスの分析と対処
原因の分析:考えられる原因には、低速な SQL クエリ、高いログレベル、頻繁なファイルの読み書き操作などがあります。
解決策 (これらに限定されません):
データベース:スロークエリログを確認します。SQL 文とインデックスを最適化します。
ログサービス:アプリケーションのログレベルを下げ (例:DEBUG から INFO へ)、ログローテーションを設定します。
ファイル I/O 戦略:ファイルの読み書きロジックを確認します。メモリキャッシュを使用し、バッファーサイズを増やします。
ステップ 4:ディスクパフォーマンスの評価とスペックアップ (任意)
アプリケーション層の最適化で負荷を軽減できない場合は、ディスクをスペックアップしてパフォーマンスを向上させることができます。
要件の評価:
iostatによって報告された実際の IOPS とスループットに基づいて、パフォーマンス目標を決定します。スペックアップの実行:パフォーマンス目標に基づき、ディスクをより高い仕様にスペックアップします。
推奨事項
モニタリングとアラートの設定:
%util、IOPS、スループットなどの主要なディスクメトリックに対して、適切なアラートのしきい値 (例:80%) を設定し、問題を早期に検出します。アプリケーションの I/O 最適化:アプリケーション層で、可能な限りキャッシュを実装して、直接的なディスクの読み書きを減らします。書き込みが多いシナリオでは、非同期書き込みやバッチ書き込みを使用して I/O ピークを平滑化することを検討してください。