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

推薦する

Portainer を使用した Docker コンテナのデプロイのプロジェクト実践

目次1. 背景2. 操作手順3. Portinerをインストールする3.1 Dockerのデプロイメ...

Linux のバックグラウンドで & と nohup を使用する方法

ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので...

Vue ページ印刷で自動ページングを実装する 2 つの方法

この記事では、ページ印刷の自動ページングを実現するためのVueの具体的なコードを例として紹介します。...

Docker インストール rocketMQ チュートリアル (最も詳細)

RocketMQ は、Alibaba が設計した分散型のキューベースのメッセージング ミドルウェア...

MySQL 8.0 の非表示列に対する基本操作

目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...

MySQL テーブル全体の暗号化ソリューション keyring_file の詳細な説明

例示するMySql Community Edition は、5.7.11 以降、テーブルベースのデー...

JS で配列の重複排除を実装する 7 つの方法

目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....

プロファイルを使用して遅い SQL を分析する MySQL の詳細な説明 (グループ左結合はサブクエリよりも効率的です)

プロファイルを使用して遅いSQLを分析するMySQL の SQL パフォーマンス アナライザーの主な...

MySQL 外部キー制約 (FOREIGN KEY) ケースの説明

MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約...

マウス追従ゲームを実現するjs

この記事では、マウス追従ゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内...

SQL 文における複合主キーと結合主キーに関する予備的研究

1. 複合主キーいわゆる複合主キーとは、テーブルの主キーが複数のフィールドで構成され、ビジネス上の意...

LinuxサーバーにGRUBをインストールする手順

Linux サーバーに GRUB をインストールする方法クラウド移行ツールを使用して、CentOS ...

素晴らしい CSS ナビゲーション バーの下線効果

中国初のカッター github.com/chokcocoまず、ここに画像があります。純粋な CSS ...

Navicat for MySql ビジュアルインポート CSV ファイル

この記事では、参考までに、Navicat for MySql の CSV ファイルのビジュアルインポ...

CSS 属性を使用してマウス イベントをブロックする方法 (マウス クリックは上位の要素を貫通する可能性があります)

由来: 数日前、テスターから写真を見るという要件が送られてきました。 この要件を見たとき、私は少し混...