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

推薦する

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

ウェブデザインスキル:中国語と英語が混在するウェブページの上位表示の問題

<br />私はこの問題で気が狂いそうです。症状は次のとおりです。 症状の説明: Int...

JS に依存せずにレスポンシブ レイアウトを実現する CSS3 モバイル vw+rem メソッド

1. はじめに(1)vw/vhの紹介使用する前に、vw と rem とは何か、その機能について簡単に...

HTML4とHTML5の違い: 入力にフォーカス実装コードを追加する方法

html4:コードをコピーコードは次のとおりです。 <フォーム> <p>&l...

純粋な CSS3 でモバイルの拡大と縮小の効果を実装するためのサンプル コード

この記事では、純粋な CSS3 を使用してモバイル端末での展開と折りたたみの効果を実装するサンプルコ...

Windows 2016 Server セキュリティ設定

目次システムアップデート構成Windows Update サーバーの変更自動更新を有効にして許可する...

Linux サーバーのクイックアンインストールとノード環境のインストール (簡単に始められます)

1.まずnpmをアンインストールする sudo npm アンインストール npm -g 2. ノー...

Webpack パッケージング CSS 背景画像パスの問題に対する完璧なソリューション

vue コンポーネントのスタイル タグ内には、背景画像を使用する次の CSS コードがあります。 背...

Linux に MySQL 8.0.x をインストールするための完全な手順

マイグレーションMySQL 入門MySQL はもともとオープンソースのリレーショナル データベース管...

MySQLでよく使われる文字列関数トップ10の詳細な説明

こんにちは、みんな!技術の話ばかりで髪は切らないトニーです。データベース関数は、何らかの機能を持ち、...

MySQLトリガーはPHPプロジェクトで情報のバックアップ、復元、クリアに使用されます。

例: PHP バックグラウンド コードを通じて、従業員情報を削除したり、削除した従業員情報を復元した...

1 時間で MySQL データベースを学ぶ (Zhang Guo)

目次1. データベースの概要1.1 開発の歴史2. MySQL の紹介2.1. MySQLの概要2....

Dockerコンテナのセルフスタートを実装する方法

コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...

MySQLデータ移行方法とツールの分析

この記事は主にMySQLデータ移行方法とツールの分析を紹介します。サンプルコードを通じて詳細に紹介さ...

Ubuntu 20.04 に cuda10.1 をインストールする手順 (グラフィック チュートリアル)

インストール前の準備CUDA の主な目的はディープラーニングであり、現在主流のディープラーニングフレ...