システム障害分析の一般的な方法

「パフォーマンスのピーク」第 2.5 章 方法

USE是utilization、saturation、erros三个词的缩写,应用于性能研究,用来识别系统瓶颈,一言以蔽之,就是:对于所有的资源,查看它的使用率、饱和度和错误。

这些术语定义如下:
资源:所有服务器物理元器件(CPU、总线。。。)。某些软件资源也能算在内,提供有用的指标。
使用率:在规定的时间间隔内,资源用于服务工作的时间百分比。
饱和度:资源不能再服务更多额外工作的程度,通常有等待队列。
错误:错误事件的个数。

例えば:

う:

  • ハードウェア
    • CPU:使用率(TOPで見た結果)、1秒以内のビジー時間の割合
    • メモリ: 現在利用可能なメモリ
    • ネットワークカード:パケット受信スループット/最大帯域幅、パケット送信スループット/最大帯域幅(ネットワークカードの能力)
    • ストレージデバイス I/O: デバイスビジー時間/合計時間
  • ソフトウェア
    • ミューテックス: ロックが保持されている時間/合計時間
    • スレッド プール: スレッド プールがビジーな時間/合計時間
    • プロセス/スレッド容量: システム内のスレッド/プロセスの数
    • ファイル記述子の容量: システム内の記述子の数

S:

  • ハードウェア
    • CPU: 実行可能なキューの長さ
    • メモリ: 匿名ページ、スワップなど、および oom イベント
    • ストレージデバイス I/O: 待機キューの長さ
  • ソフトウェア
    • Mutex: ロックを待機しているスレッドのキューの長さ
    • スレッド プール: スレッド プールの処理を待機しているリクエスト キューの長さ
    • プロセス/スレッド容量: システムの作成を待機しているスレッド/プロセスの数
    • ファイル記述子の容量: システムが作成するのを待機している記述子の数

E:

  • ハードウェア
    • ストレージデバイス I/O: デバイスエラーの数
  • ソフトウェア
    • プロセス/スレッド容量: 作成失敗の数
    • ファイル記述子の容量: ファイル記述子の割り当て失敗の数

一般的なコマンド:

# 以下命令部分依赖sysstat包
uptime              # 对系统的全局状态有一个大致的了解
 
dmesg | tail        # 显示最新的几条系统日志

df  -h              # 检查磁盘空间
 
top                 # 全面了解系统指标
 
vmstat 1            # 显示CPU,内存,虚拟内存相关信息
 
mpstat -P ALL 1     # 显示每个核具体消耗情况
 
pidstat 1           # 带历史信息的top
 
iostat -xz 1        # 查看块设备即io状况
 
free -m             # 查看系统内存
 
sar -n DEV 1        # 查看网络接口的吞吐量
 
sar -n TCP,ETCP 1   # 检查TCP相关信息
 

稼働時間:

このコマンドを使用すると、システムの負荷平均をすばやく確認できます。Linux システムでは、これには、CPU を必要とするタスクまたは CPU を使用しているタスク、および IO でブロックされているタスクが含まれます。

これら 3 つの値は、1 分、5 分、15 分のシステム負荷の指標で重み付けされた動的平均であり、単純にこの期間の平均値と考えることができます。これら 3 つの値に基づいて、システム負荷が時間の経過とともにどのように変化するかを理解できます。たとえば、現在システムに問題があり、これら 3 つの値を確認して、1 分の負荷値が 15 分の負荷値よりもはるかに小さいことがわかった場合、おそらくその時点を見逃していると考えられます。システムがおかしくなった。

システム負荷とは何ですか?
システム負荷平均は、特定の時間間隔における実行キュー内のプロセスの平均数として定義されます。プロセスは、次の条件を満たす場合に実行キューに入れられます。

I/O 操作の結果を待っていません。
積極的に待機状態に入っておらず (つまり、「wait」を呼び出していない)
、停止していません (例: 終了を待っています)
。 、CPU コアあたりの現在アクティブなプロセスの数が 3 を超えていない場合、システムは正常に動作します。もちろん、ここで言及されているのは各 CPU コアです。つまり、ホストがクアッドコア CPU の場合、稼働時間によって出力される最後の文字列が 12 未満である限り、システム負荷はそれほど高くないことを意味します。もちろん、20 に達すると、現在のシステム負荷が非常に深刻で、Web スクリプトを開いたり実行したりすると非常に時間がかかると推定されます。

 

dmesg:

権限を追加する必要があります sudo dmesg
このコマンドは、最新のいくつかのシステム ログを表示します。ここでは主に、パフォーマンスの問題を引き起こすシステム エラーがあるかどうかを確認します。

 

df -h:

ディスク使用量を表示する

 

CPU ステータス (CPU 状態): ユーザー プロセス占有率、システム プロセス占有率、ユーザーの最適優先プロセス占有率、アイドル CPU リソース率などを含みます。

メモリステータス (Mem): メモリの総量、使用量、空き量などを含みます。

スワップ パーティションのステータス (Swap): スワップ パーティションの合計量、使用量、アイドル量などが含まれます。

各プロセスのステータス: プロセス ID、ユーザー名、優先度、CPU とメモリの使用量、プロセスの実行時に実行されたコマンド ラインなど。

「top」に入った後、次のボタンを押すと、対応する機能が表示されます。

  • 【q】トッププログラムを終了する
  • 【c】完全なコマンドラインを表示するための拡張コマンドライン情報。
  • 【P】CPU使用率で並べ替えます。
  • [N] プロセス ID で並べ替えます。
  • 【M】メモリ使用量順に並べ替えます。
  • [スペース] 表示情報を即座に更新します。

topコマンド実行後、システムは5秒ごとにステータス情報を自動的に更新します。更新間隔を指定したい場合は、起動時に「-d」を追加します。 

 

vmstat1:

ユーザー モードの CPU 時間 (us) とカーネル モードの CPU 時間 (sy) を合計すると、CPU がビジーかどうかをさらに確認できます。io (wa) の待機時間が長い場合は、ディスクがボトルネックであることを意味します。これはアイドル時間 (id) にも含まれており、この時点では CPU もアイドル状態であり、タスクはディスク上でブロックされています。この時のIO。io の待機時間 (wa) は、別の形式の CPU アイドルとみなすことができ、これによって CPU がアイドル状態になる理由を説明できます。
システムが IO を処理するとき、カーネル モード時間 (sy) が確実に消費されます。カーネル モードで費やされる時間が 20% を超えるなど、高い場合は、カーネルの IO 処理効率が高くないか、コードにバッチ操作ではなく複数の非同期ループ呼び出しなどの問題がある可能性があります。
注目すべき指標:

- r: 実行可能な状態のタスク (実行中のタスクと実行を待機しているタスクを含む)。この値は、負荷平均よりも CPU の飽和度を示す優れた指標です。この値には、io 関連タスクの待機は含まれません。r の値が現在の CPU 数より大きい場合、システムは飽和状態になります。

- free: 空きメモリ サイズ (KB 単位)。

- si、so: メモリ ページを入れ替えます。これら 2 つの値がゼロ以外の場合、メモリが不足していることを意味します。

- us、sy、id、wa、st: CPU 時間のさまざまな指標 (すべての CPU の平均値を取る) は、それぞれ次のことを表します: ユーザー モード時間、カーネル モード時間、アイドル時間、IO 待機時間、スチール時間 (仮想化された場合)他のテナントのシステム オーバーヘッドを削減する環境)

vmstat は、仮想メモリと CPU に関する情報を表示します。コマンドラインの 1 は、1 秒ごとに表示することを意味します。

 

mpstat -P ALL 1:

mpstat コマンドは各 CPU の時間を出力し、CPU が均等にタスクを処理しているかどうかを確認できます。単一の CPU 使用率が高い場合、それはシングル スレッド アプリケーションです。

 

pidstat 1:

pidstat は、top と非常によく似ていますが、top のように毎回画面をクリアするのではなく、1 間隔おきに出力できる点が異なります。このコマンドを使用すると、プロセスの考えられる動作パターンを簡単に表示できるほか、過去を直接コピーすることもできるため、各プロセスの実行状況の経時的変化を簡単に記録できます。

 

iostat -xz 1:

iostat は、ブロック デバイス (ディスク) の現在の負荷とパフォーマンスを理解するための重要なツールです。いくつかの指標の意味:

- r/s、w/s、rkB/s、wkB/s: 1 秒あたりの読み取り数、1 秒あたりの書き込み数、1 秒あたりの読み取りデータ量、および 1 秒あたりの書き込みデータ量。システムをデバイスに接続します。これらのインジケーターはシステムのワークロードを反映します。システムのパフォーマンスに問題があり、負荷が高すぎる可能性があります。

- await: IO デバイスに対するシステムのリクエストの平均応答時間。これには、リクエストがキューに入れられた時間とリクエストが処理された時間が含まれます。平均応答時間が経験値を超えている場合は、デバイスが飽和しているか、デバイスに問題があることを示しています。

- avgqu-sz: デバイスリクエストキューの平均長。キューの長さが 1 より大きい場合は、デバイスが飽和していることを示します。

- %util: デバイスの使用率。デバイスの混雑度は、1 秒間にデバイスが io を処理する時間の割合を示します。使用率が 60% を超えると、通常、パフォーマンスの問題 (await で見られる) が発生しますが、デバイスごとに異なります。使用率が 100% に近い場合は、ディスクが飽和していることを示します

知らせ:

ブロック デバイスが論理ブロック デバイスであり、論理高速デバイスの背後に多数の物理ディスクがある場合、使用率 100% は、一部の IO 処理時間が 100% に達したことを示すだけであり、バックエンドの物理ディスクは飽和にはほど遠い可能性があります。より多くの負荷を処理できます。

ディスク IO パフォーマンスが低いからといって、必ずしもアプリケーションに問題があるとは限りません。アプリケーションは、IO をブロックすることなく、さまざまな方法で非同期 IO を実行できます。また、アプリケーションは、事前読み取りや書き込みバッファリングなどのテクノロジを使用して、IO 遅延がそれ自体に及ぼす影響を軽減することもできます。

 

フリー -m

available: 現在利用可能なメモリ。この値がゼロに近いかどうかを確認します。値がゼロに近いと、ディスク IO が増加し、パフォーマンスが低下します。

 

sar -n DEV 1

ネットワーク インターフェイスのスループットを確認します。rxkB/s および txkB/s で負荷を測定でき、ネットワーク トラフィックの制限に達したかどうかも確認できます。上記の例では、eth2 のスループットは約 8 M バイト/秒に達します。これはほぼ 64 メガビット/秒に相当し、10 ギガビット/秒よりもはるかに低くなります。

 

sar -n TCP、ETCP 1

重要な TCP インジケーターの概要:
- retrans/s: 1 秒あたりの TCP 再送信の数

-passive/s: ソースから毎秒開始される TCP 接続、つまり、accept() を使用してローカル プログラムによって受け入れられる接続

- active/s: ローカルで毎秒アクティブに開かれる TCP 接続。つまり、ローカル プログラムが connect() システム コールを使用します。

ノート:

通常、アクティブとパッシブの数は、サーバーの負荷を測定するために使用できます。つまり、受け入れられた接続の数 (パッシブ)、ダウンストリーム接続の数 (アクティブ) です。アクティブはホストからの接続、パッシブはホストからの接続と単純に考えることができますが、これは、loalhost と localhost 間の接続のような、それほど厳密な記述ではありません。

再送信はネットワークまたはサーバーの問題を示しています。おそらくネットワークが不安定で、サーバーが過負荷になってパケット損失が始まっている可能性があります。上の例は、1 秒あたり 2 回のみの再送信を意味します。
 

おすすめ

転載: blog.csdn.net/sm9sun/article/details/113181355