GNU/Linux >> Linux の 問題 >  >> Linux

Linux の CPU 使用率とプロセス実行履歴

解決策 1:

これを行うには、いくつかの方法があります。暴走シナリオでは、1 つだけではなく、多数のプロセスが原因である可能性が十分にあることに注意してください。

最初の方法は、pidstat をセットアップしてバックグラウンドで実行し、データを生成することです。

pidstat -u 600 >/var/log/pidstats.log & disown $!

これにより、システムの実行状況を 10 分間隔で非常に詳細に把握できます。最も価値があり信頼できるデータが得られるので、これを最初の寄港地にすることをお勧めします。

これには問題があります。主に、ボックスが暴走した cpu ループに入り、巨大な負荷が発生する場合です。実際のプロセスが負荷中にタイムリーに実行されることが保証されていないため (実行されたとしても)、実際に出力を見逃す可能性があります。 !

これを確認する 2 つ目の方法は、プロセス アカウンティングを有効にすることです。おそらく長期的な選択肢です。

accton on

これにより、プロセス アカウンティングが有効になります (まだ追加されていない場合)。以前に実行されていなかった場合は、実行に時間がかかります。

たとえば 24 時間実行された後、そのようなコマンドを実行できます (このような出力が生成されます)。

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

列は次のように並べられています:

<オール>
  • 通話数
  • 通話の割合
  • このタイプのすべてのプロセスに費やされた実際の時間
  • パーセンテージ。
  • ユーザーの CPU 時間
  • パーセンテージ
  • システムの CPU 時間。
  • 平均 IO 呼び出し。
  • パーセンテージ
  • コマンド名
  • 探しているのは、ユーザー/システム CPU 時間を最も多く生成するプロセス タイプです。

    これにより、データが CPU 時間の合計 (一番上の行) として分類され、次にその CPU 時間がどのように分割されたかが示されます。プロセス アカウンティングは、プロセスが生成されたときにのみ適切にアカウンティングされるため、すべてのサービスがアカウンティングされていることを確認するために、システムを有効にした後にシステムを再起動するのがおそらく最善です。

    これは、この問題の原因がどのプロセスであるかを実際に明確に示すものではありませんが、良い感触を与えるかもしれません. 24 時間のスナップショットである可能性があるため、結果が歪む可能性があるため、その点に注意してください。また、カーネル機能であるため、常にログに記録する必要があり、pidstat とは異なり、負荷が高い場合でも常に出力が生成されます。

    利用可能な最後のオプションもプロセス アカウンティングを使用するため、上記のように有効にできますが、プログラム「lastcomm」を使用して、問題が発生した頃に実行されたプロセスの統計と、各プロセスの CPU 統計を生成します。

    lastcomm | grep "May  8 22:[01234]"
    kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
    sleep                  root     __         0.00 secs Tue May  8 22:49
    sa                     root     pts/0      0.00 secs Tue May  8 22:49
    sa                     root     pts/0      0.00 secs Tue May  8 22:49
    sa                   X root     pts/0      0.00 secs Tue May  8 22:49
    ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
    awk                    root     __         0.00 secs Tue May  8 22:49
    

    これにより、問題の原因についてのヒントも得られる可能性があります。

    解決策 2:

    Atop は、プロセス レベルへのドリルダウンを調べるのに特に便利なデーモンであり、デフォルトでこのデータを 28 日間アーカイブします。優れたリアルタイム監視インターフェースを提供するだけでなく、これらのログ ファイルを開いてステップスルーするように指定できます。

    この記事では機能の概要を説明しています。詳細については、マンページを参照してください。

    本当に素晴らしいソフトウェアです。

    解決策 3:

    psmon や monit などのプログラムが役に立つかもしれません。これらは、システムで実行されているプロセスを監視でき、しきい値 (CPU 使用率、メモリ使用率など) を超えた場合に、何が起こっているかについての電子メール レポートを送信するように設定できます。

    不正なプロセスを自動的に再起動することもできます。


    Linux
    1. Linuxでゾンビプロセスを見つけて殺す方法

    2. Linuxで単一プロセスのCPU使用率とメモリ使用率を取得しますか?

    3. CからLinuxでPIDによってプロセスのCPU使用率を計算する方法は?

    1. Linuxで最も高いメモリとCPU使用率で上位のプロセスを検索する

    2. Linux Catコマンド:使用法と例

    3. Linux :最後の 1 秒間のプロセスによる CPU 使用率を確認する

    1. Linux Sedコマンド:使用法と例

    2. Linuxでのコマンドまたはプロセスの実行時間を検索する

    3. LinuxでプロセスのCPU使用率を制限する方法