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軍事ルールの詳細な説明

推薦する

Ubuntu 20.04でAliソースを変更する方法

なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...

JS の 3 つの主要な問題、非同期性とシングルスレッドについて簡単に説明します。

目次シングルスレッド非同期シングルスレッドしかし、開発中にネットワーク リクエストやスケジュールされ...

Vueはユーザーログイン切り替えを実装します

この記事では、ユーザーのログイン切り替えを実現するためのVueの具体的なコードを例として紹介します。...

DIV、テーブル、XHTML のウェブサイト構築の違いの分析と説明

簡単に言えば、ウェブサイト構築とは、「この人はどんな外見をしているのか」と「この人はどんな内面を持っ...

MySQL 構成マスタースレーブサーバー (マスター 1 台とスレーブ複数台)

目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...

Javascriptのクロージャとアプリケーションの詳細な説明

目次序文1. クロージャとは何ですか? 1.1 クロージャは条件コードを満たす1.2 クロージャ生成...

vue-router のハッシュモードと履歴モードの違い

vue-routerには2つのモードがありますハッシュモード履歴モード1. シングルページアプリケー...

Dockerfile における ENV 命令の具体的な使用法の詳細な説明

1. Dockerfile 内の ENV 命令は、イメージの環境変数を定義するために使用されます。次...

初心者がHTMLタグを学ぶ(2)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

MySQL で 2 つのセットの交差/差/和を取得する方法

MySQL の一般的なシナリオ: 2 つのデータ セットの交差と差を取得するステップ1. 2つのコレ...

Vueシングルページアプリケーションの事前レンダリング方法の例

目次序文vue-cli 2.0 バージョンvue-cli 3.0 バージョン要約する序文vue-cl...

画像ボタン送信とフォーム繰り返し送信の問題に関する議論

多くの場合、フォームを美しくするために、送信ボタンが画像に置き換えられます。ただし、細部に注意を払わ...

Linux の権限管理コマンド (chmod/chown/chgrp/unmask) の詳細な説明

目次chmod例権限に関する特別な注意分析するチョーンchgrp umask Linux オペレーテ...