linuxパフォーマンス-04大量の割り込みプロセスとゾンビプロセスが発生


文書ディレクトリ
  • 基礎知識
  • システムにおけるプロセス実行状態
  • ゾンビプロセス
  • 中断不可能プロセスとゾンビプロセスの簡単な定義
  • 問題解決構想
  • iowaitの増加に遭遇し、cpuが高すぎる場合の解決策
  • ゾンビプロセス問題解決
  • ps iO増加
  • について
    基礎知識
    システム内のプロセス実行ステータス
    R   Running   Runnable    ,      CPU       ,            。
    D   Disk Sleep    ,           (Uninterruptible Sleep),             ,                   。
    Z   Zombie    ,     “      ”    ,        。       ,             ,              (        、PID  )。
    S   Interruptible Sleep    ,          ,                  。           ,         R   。
    I   Idle    ,       ,              。    ,               D   ,          ,               ,  Idle           。   ,D               , I         。
    T/t   stopped  traced   ,               
    x    dead   ,        ,     top  ps    
    

    ゾンビプロセス
  • 通常、あるプロセスがサブプロセスを作成した後、彼は呼び出しシステムを通じてwait()またはwaitpid()を呼び出してサブプロセスの終了を待って、サブプロセスリソースを回収するはずです.
  • サブプロセスが終了すると、sigchld信号が親プロセスに送信されるので、親プロセスはsigchld信号の処理関数を登録することもでき、非同期回収リソース
  • 親プロセスがそうしなかったり、サブプロセスの実行が早すぎたりして、親プロセスがサブプロセスの状態を処理するのに間に合わなかったりした場合、サブプロセスはすでに早期に終了しています.このとき、サブプロセスはゾンビプロセス
  • になります.
    中断不可能プロセスとゾンビプロセスの簡単な定義
  • は、通常、プロセスがハードウェアと対話していることを示し、プロセスデータがハードウェアと一致することを保護するために、システムは他のプロセスまたはプロセスの中断を許可しない.
  • ゾンビプロセスは、プロセスが終了したことを示しますが、親プロセスはプロセスが占有するリソースを回収していません.

  • 問題解決の考え方
    iowaitが増加し続け、cpuが高すぎる場合の解決策
  • 1、dststatでiowaitの上昇を見つけたのは、
  • を読むか書くかのためです.
  • 2、topコマンドで状態D(中断不可)のプロセス番号
  • を見つける
  • 3、指定プロセスは彼のio状況を見る
  • # -d    I/O     ,-p      ,   1     3    
    $ pidstat -d -p 4344 1 3
    06:38:50      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
    06:38:51        0      4344      0.00      0.00      0.00       0  app
    06:38:52        0      4344      0.00      0.00      0.00       0  app
    06:38:53        0      4344      0.00      0.00      0.00       0  app
    
  • 4第3歩のデータはすべて正常で、それでは直接-pを除いてすべての
  • を見ます
  • 5は、3番目のステップまたは4番目のステップによってiowaitをもたらすプロセスを決定し、strace-p pidでプロセスを追跡するか、perf topでプロセスを表示する呼び出しスタックで問題を発見する
  • を開始することができる.
    ゾンビプロセスの問題解決
  • ゾンビプロセスのPidを見つけてpstreeで親プロセスを見つけて再び分析
  • # -a          
    # p PID
    # s          
    $ pstree -aps 3084
    systemd,1
      └─dockerd,15006 -H fd://
          └─docker-containe,15024 --config /var/run/docker/containerd/containerd.toml
              └─docker-containe,3991 -namespace moby -workdir...
                  └─app,4009
                      └─(app,3084)
    

    ps iOの増加について
  • ディスクI/Oはiowaitの上昇を招いたが、iowaitの高さはI/Oのパフォーマンスのボトルネックを表すとは限らない.システム内でI/Oタイプのプロセスのみが実行されている場合、iowaitも高くなりますが、実際にはディスクの読み書きがパフォーマンスのボトルネックに達していません.
  • このような問題が発生した場合、dtstatとpidstatでディスクの問題かどうかを確認してから、関連プロセスにフォローして
  • をさらに決定することができます.