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

推薦する

Nginxの仕組みの詳細な説明

Nginxの仕組みNginx はコアとモジュールで構成されています。 Nginx 自体は実際にはほと...

Webpack5-react スキャフォールディングをゼロから構築するための実装手順 (ソースコード付き)

目次ウェブパック5公式スタート建築ガイド構築を開始する依存する準備が完了したら、プロジェクトの構築を...

JavaScriptの詳細な分析と方向の変更方法

目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...

単一のdivの正多角形変換を実現する純粋なCSS

前回の記事では、beforeとafterの擬似要素を使用してMaterial Designスタイルの...

HTML 中国語文字エンコード標準の概要

HTML では、Web ページで使用されるエンコーディングを指定する必要があります。一般的な指定方法...

ウェブデザインにおける2種類のタブアプリケーション

現在、Web デザインではタブが広く使用されていますが、一般的に次の 2 つのタイプに分けられます。...

Facebookの情報アーキテクチャの分析

<br />原文: http://uicom.net/blog/?p=762 Faceb...

ウェブページのコピー防止機能の実装方法(クラッキング手法付き)

ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...

Dockerイメージを素早くデプロイして実行する最新のIDEAプロセスの詳細な説明

背景docker とアイデアを使用して、Java Web の開発、展開、運用までのプロセス全体を実現...

Navicat の MySQL へのリモート接続の実装手順の分析

序文皆さんはリモート サーバーで開発を行っており、MySQL の使用率はかなり高いはずです。コマンド...

Ubuntu 18.04にmysql5.7をインストールする

Ubuntu 18.04では参考までにmysql 5.7をインストールします。具体的な内容は以下のと...

forループ内のvarの問題の解決

序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

MySQLデータベースを定期的に自動バックアップする方法

データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...