Posted at

Linux Performance Analysis in 60,000 Milliseconds

More than 3 years have passed since last update.

よくまとまっているので要所を抜粋メモ


In this post, the Netflix Performance Engineering team will show you the first 60 seconds of an optimized performance investigation at the command line, using standard Linux tools you should have available.


uptime

dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top


uptime


  • ロードアベレージを把握

  • この値が高い場合はたいてい CPU デマンドな問題であることが多い


    • vmstat or mpstat で掘り下げる




dmesg | tail


  • システムメッセージを表示

  • 何かエラーが出てる場合、大抵はパフォーマンスに影響が出ている

  • 決してこのステップを飛ばしてはならない


vmstat 1


  • サーバの統計情報を1秒おきに表示

  • チェックすべきもの


    • r


      • 実行待ちプロセス数。ロードアベレージが CPU デマンドなのかどうかを判断できる。

      • CPU 数よりもこの値が多ければサチってる。



    • free


      • フリーメモリの Kilo Bytes 量。充分に多いかを確認。



    • si, so


      • swap-in/out 数。ゼロではければメモリが足りてない。



    • us, sy, id, wa, st


      • 全 CPU 時間がどう使われているかのブレークダウン表示。

      • usertime, system time (kernel), idle, wait I/O, stolen

      • CPU がビジーであれば user, system 時間を確認して分析する

      • wait I/O が高ければディスクがボトルネック

      • system time は IO 処理に必要だが 20% をこえるような場合 kernel の IO 処理に何らかのムダが生じている

      • usertime が高くても CPU がサチってるとは限らない


        • その判断は r 列を見て行う








mpstat -P ALL 1


  • CPU 時間を各 CPU にブレークダウンして表示

  • CPU が1つしか使われてなかったらアプリ側が活かしきれてない


pidstat 1


  • CPU を使ってるプロセスのサマリを出す

  • top と違ってスクリーンがクリアされないので状態の遷移を確認できる


iostat -xz 1


  • ブロックデバイスの分析に使う

  • 発行されたワークロードとその結果を見ることができる

  • チェックすべきもの


    • r/s, w/s, rkB/s, wkB/s


      • デバイスに対して発行されたリードライト情報。

      • ワークロードの rw 特性をつかむ。

      • 問題が起きている場合はデバイスの特性にあってない要求が出されている。



    • await


      • IO にかかる平均時間のミリ秒表示。

      • 値が高い場合はデバイスがサチってるか問題が起きている。



    • avggu-sz


      • デバイスに発行されたリクエスト数の平均。

      • 1より大きい場合はサチっている


        • リクエストを並列処理できるデバイスであっても





    • %util


      • デバイスからレポートされた使用率。

      • 60% を超えていると多くの場合パフォーマンスが劣化する


        • デバイスにもよるが







  • ストレージデバイスが複数のバックエンドディスクからなる論理ディスクの場合、100% の util は何らかの IO 処理が時間を使いきったということで、必ずしもバックエンドがサチってることを示さない


    • たいていは余力がある



  • ディスク IO 性能が低いことが必ずしもアプリの問題ではないことに留意。

  • 多くのアプリケーションには非同期 IO などのテクニックがある。


free -m


  • チェックすべきもの


    • buffers


      • ブロックデバイスの IO に用いるバッファキャッシュの量



    • cached


      • ファイルシステムにより利用されているページキャッシュの量





  • 以上のパラメータが 0 付近であれば IO 負荷が高い

  • ZFS on Linux は free の結果に正しいキャッシュ量を返さないので注意


sar -n DEV 1


  • ネットワーク・インタフェースのスループットを表示

  • 限界に近づいてないか確認


sar -n TCP,ETCP 1


  • TCP メトリクスのサマリ表示

  • チェックすべきもの


    • active/s


      • 張りに行っているセッションの数 / sec(outbound)



    • passive/s


      • 受けているセッションの数 / sec(inbound)



    • retrans/s


      • 再送数 / sec





  • active, passive はざっくりとサーバの負荷を測るのに使う


    • localhost to localhost もカウントにはいるので「ざっくり」




top


  • これまで紹介してきたコマンドの結果を含む

  • 時系列の変化を把握しづらい

  • 更新をとめるには ctrl-s する

  • 再開は ctrl-q