Linux でディスク IO を表示し、読み取りと書き込みで高い IO を占有するプロセスを見つけます。

Linux でディスク IO を表示し、読み取りと書き込みで高い IO を占有するプロセスを見つけます。

背景 - オンラインアラート

オンライン サーバーがアラームを発し、ディスク使用率 disk.util > 90 となり、アラームが継続しました。

サーバーにログインした後、iostat -x 1 10 を使用して関連するディスク使用量情報を表示しました。関連するスクリーンショットは次のとおりです。

 # iostat コマンドがない場合は、yum install sysstat を使用してインストールします # iostat -x 1 10 

上図からわかるように、頻繁なデータ読み取りにより、vdb ディスクの %util[IO] はほぼ 100% になっています。

その他のフィールドの説明

デバイス: デバイス名
TPS: 1 秒あたりの IO 読み取りおよび書き込み要求の数。複数の論理要求を、デバイスへの単一の I/O 要求に組み合わせることができます。
Blk_read/s (kB_read/s、MB_read/s): デバイスから読み取られたデータの量。1 秒あたりのブロック (キロバイト、メガバイト) で表されます。ブロックはセクターに相当するため、ブロック サイズは 512 バイトです。
Blk_wrtn/s (kB_wrtn/s、MB_wrtn/s): デバイスに書き込まれたデータの量。1 秒あたりのブロック (キロバイト、メガバイト) で表されます。ブロックはセクターに相当するため、ブロック サイズは 512 バイトです。
Blk_read (kB_read、MB_read): 読み取られたブロックの合計数 (キロバイト、メガバイト)。
Blk_wrtn (kB_wrtn、MB_wrtn): 書き込まれたブロックの合計数 (キロバイト、メガバイト)。

rrqm/s: 1 秒あたりにデバイスにマージされた読み取り要求の数。つまり、delta(rmerge)/s
wrqm/s: 1 秒あたりにデバイスにマージされた書き込み要求の数。つまり、delta(wmerge)/s
r/s: 1 秒あたりに完了した I/O デバイスの読み取り回数。それはデルタ(リオ)/sです
w/s: 1 秒あたりに完了した書き込み I/0 デバイスの数。つまり、デルタ(wio)/s
rsec/s (rkB/s、rMB/s): デバイスから 1 秒あたりに読み取られるセクター数 (キロバイト、メガバイト)。各セクターのサイズは512バイトです
wsec/s (wkB/s、wMB/s): 1 秒あたりにデバイスに書き込まれるセクター数 (キロバイト、メガバイト)。各セクターのサイズは512バイトです

avgrq-sz: デバイス I/O 操作あたりの平均データ量 (セクター単位)。つまり、delta(rsec+wsec)/delta(rio+wio)
avgqu-sz: デバイスに毎回送信される I/O キューの平均長。
await: 各 IO 要求の平均待機時間。 (待機キュー時間と処理時間を含む、ミリ秒単位)
r_await: 各 IO 読み取り要求の平均待機時間。 (待機キュー時間と処理時間を含む、ミリ秒単位)
w_await: 各 IO 書き込み要求の平均待機時間。 (待機キュー時間と処理時間を含む、ミリ秒単位)
svctm: 各デバイス I/O 操作の平均処理時間 (ミリ秒単位)。警告します!このフィールドの値は信頼しないでください。このフィールドは、sysstat の将来のバージョンで削除されます。
%util: 1 秒あたりの何パーセントが I/O 操作に使用されているか、または 1 秒あたりに I/O キューが空でない時間の長さ。この値が 100% に近づくと、デバイスの飽和が発生します。

IO使用量が多いプロセスを見つける

iotopコマンドを通じて

コマンドが利用できない場合は、yum install iotop コマンドを使用してインストールします。

# iotop -oP

このコマンドを使用すると、プロセス番号、ディスク読み取り量、ディスク書き込み量、IO パーセンテージ、関連するコマンドなどの詳細情報を表示できます。「両方の grep コマンドは、大量の IO 読み取り量を引き起こします。」

pidstatコマンドを通じて

# コマンドの意味: 1 秒ごとに更新される I/O 統計情報を表示します # pidstat -d 1 

grep コマンドが大量の読み取り IO を占有していることがわかります。次に、PID に基づいて関連するプロセス情報を表示できます。

注: この図の PID は、前の図のプロセスが実行され、この図は実行後に生成されたプロセスであるため、前の図の PID と異なります (両方とも同じスクリプトを実行します)。

要約する

以上、Linux でディスク IO をチェックし、大量の IO 読み取りと書き込みを占有しているプロセスを見つける方法についてご紹介しました。お役に立てれば幸いです。

以下もご興味があるかもしれません:
  • Linux IO 多重化 epoll ネットワーク プログラミング
  • Linuxコマンドiostatの詳しい説明
  • Linux IO のレベルトリガーとエッジトリガーの違い
  • Linux のソケット IO モデルの興味深い説明
  • Linux シェルプログラミングにおける IO、条件、ループ処理の詳細に関する議論
  • iostat を使用して Linux ハードディスクの IO パフォーマンスを表示する方法
  • Linux IOの詳細な紹介

<<:  GobangゲームのWebバージョンを実装するためのJavaScript

>>:  MySQL 30軍事ルールの詳細な説明

推薦する

CSS3はさまざまな境界効果を実現します

半透明の境界線結果: 実装コード: <div> 半透明の境界線が見えますか? </...

CSSのtranslate(-50%,-50%)は水平および垂直の中央揃え効果を実現します。

translate(-50%,-50%) 属性:中央に配置するには、長さと幅の 50% だけ上と左...

Vue フォーム入力バインディング v-model

目次1.vモデル2. プロパティとイベントのバインディング3. フォーム要素のバインディング3.1 ...

Docker で PostgreSQL を実行し、いくつかの接続ツールを推奨する

1 はじめに PostgreSQL は、非常に充実した機能を備えたフリーソフトウェアのオブジェクトリ...

テーブル切り替えのための JavaScript プラグインのカプセル化

この記事では、テーブル切り替えプラグインを実装するためのJavaScriptのカプセル化コードを参考...

MySQL 5.7 のユニオンオール使用法のブラックテクノロジーを 5 分で学ぶ

MySQL 5.6 での union all のパフォーマンスパート 1:MySQL 5.6.25 ...

一般的な MySQL 関数の例の概要 [集計関数、文字列、数値、時刻と日付の処理など]

この記事では、よく使用される MySQL 関数について説明します。ご参考までに、詳細は以下の通りです...

vue3 のコンポーネントの互換性のない変更の詳細な説明

目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...

js で下線とキャメルケースの変換を実装する (複数の方法)

目次適用シナリオ:方法 1: 正規表現 (推奨)方法2: 配列のreduceメソッドを使用する方法3...

MySQL InnoDB インデックス拡張の詳細な説明

インデックス拡張: InnoDB は、プライマリ キー列をそのインデックスに追加することで、各セカン...

Nginx_geo モジュールを使用して CDN スケジュールを設定する方法

NginxのGeoモジュールの紹介geo ディレクティブは、ngx_http_geo_module ...

WebページのレイアウトではIE6の互換性の問題を考慮する必要があります

下の図は、当社のウェブサイト統計システムの訪問者詳細におけるブラウザ閲覧率を示しており、IE6 が ...

MySQL シリーズ 14 MySQL 高可用性実装

1. 内閣府マスターノードを監視することで、他のスレーブノードへの自動フェイルオーバーを実現できます...

Linux アカウントのパスワードを変更する詳細な例

個人アカウントのパスワードを変更する一般ユーザーが個人アカウントのパスワードを変更する場合は、他のコ...

WeChatミニプログラムで検索キーワードを強調表示するサンプルコード

1. はじめにプロジェクトで要件に遭遇したら、データを検索してキーワードを強調表示します。要件を受け...