プロセスが長時間実行された後の実行時間とリソース

プロセスが長時間実行された後の実行時間とリソース

たぶん基本的な質問かもしれませんが、答えを見つけるのに苦労しています。 RHEL6を使用しています。 CPU 時間がかかるプロセスを実行した後、ランタイムと IO 使用量を自動的に通知する行が表示されます。次のように読みます。

77410.101u 124.968s 1:42:43.49 657.9%    0+0k 0+1353384io 0pf+0w

次の質問があります。

  1. このメッセージの各フィールドをどのように解釈しますか?タイミング、IO使用量、CPU使用量などを推測できますが、わかりません。
  2. 実際にこの行を印刷するものは何ですか?シェルですか?ターミナルエミュレータですか?これを処理するために実行されるデーモンはありますか?その機能/サービス/それが何であれ。
  3. このメッセージを制御できますか?たとえば、印刷用のCPU使用率しきい値を設定しますか?
  4. 追加情報を追加できますか?たとえば、プロセスの絶対パス、最大メモリ使用量、最大ディスク使用量など...

ベストアンサー1

現状デバッグのためのヒント

Bashを使用しているとし、シェルのデバッグツールをオンにすることをお勧めします。

$ set -x

この出力は、この出力を生成したコマンドを実行したときに何が起こるのかを示しています。

出力

/usr/bin/timeこの出力は、実行する各コマンドのprefix timeコマンドから出力されます。この出力を取得するには、C-shell(csh)またはTurbo C-shell(tcsh)を使用しているようです。

はい

$ tcsh
$ time sleep 2
0.000u 0.000s 0:02.00 0.0%  0+0k 0+0io 0pf+0w

これがシェルであると疑われる理由はtcsh、Bashシェルでコマンドを実行したときに/usr/bin/time出力が次のようになるためです。

$ /usr/bin/time sleep 2
0.00user 0.00system 0:02.02elapsed 0%CPU (0avgtext+0avgdata 580maxresident)k
0inputs+0outputs (0major+180minor)pagefaults 0swaps

-fまたは、スイッチを使用して出力を制御できるため、表示される--format出力はBashでも取得できますが、意図的に実行する必要があります。

出力の意味

/usr/bin/time詳細モード()でコマンドを実行すると、-v次のように各フィールドのすべての詳細を取得できます。

$ /usr/bin/time -v sleep 2
    Command being timed: "sleep 2"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.00
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 584
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 184
    Voluntary context switches: 2
    Involuntary context switches: 4
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

ソース出力を並べ替える場合:

77410.101u 124.968s 1:42:43.49 657.9%    0+0k 0+1353384io 0pf+0w
^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^ ^^^^^^    ^^^^ ^^^^^^^^^^^ ^^^^^^
     1        2         3       4         5        6        7
  1. ユーザー時間(秒)
  2. システム時間(秒)
  3. 経過(壁時計)時間(h:mm:ssまたはm:ss)
  4. このタスクが占めるCPU比
  5. 平均共有テキストサイズ(キロバイト)+平均非共有データサイズ(キロバイト)
  6. プロセスのファイルシステム入力数+プロセスのファイルシステム出力数
  7. プロセスの実行中に発生した主要ページエラーの数。ディスクからページを読み取る必要があるエラー+プロセスがメインメモリからスワップアウトされた回数。

次のように同じ形式を手動で実行できます。

$ /usr/bin/time -f '%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww' sleep 2
0.00u 0.00s 0:02.00 0% 0+0k 0+0io 0pf+0w

カスタム出力

/usr/bin/time呼び出しが行われた場所を決定できるようになったら、マニュアルページからピークを取得して出力をカスタマイズできますtime。この出力には多くのオプションを含めることができます。

$ man time

抜粋

   Time
   %E     Elapsed real time (in [hours:]minutes:seconds).
   %e     (Not in tcsh.) Elapsed real time (in seconds).
   %S     Total number of CPU-seconds that the process spent in kernel mode.
   %U     Total number of CPU-seconds that the process spent in user mode.
   %P     Percentage of the CPU that this job got, computed as (%U + %S) / %E.

   Memory
   %M     Maximum resident set size of the process during its lifetime, in Kbytes.
   %t     (Not in tcsh.) Average resident set size of the process, in Kbytes.
   %K     Average total (data+stack+text) memory use of the process, in Kbytes.
   %D     Average size of the process's unshared data area, in Kbytes.
   %p     (Not in tcsh.) Average size of the process's unshared stack space, in Kbytes.
   %X     Average size of the process's shared text space, in Kbytes.
   %Z     (Not in tcsh.) System's page size, in bytes.  This is a per-system constant, but varies between systems.
   %F     Number  of major page faults that occurred while the process was running.  These are faults where the page has to be read
          in from disk.
   %R     Number of minor, or recoverable, page faults.  These are faults for pages that are not valid but which have not yet  been
          claimed by other virtual pages.  Thus the data in the page is still valid but the system tables must be updated.
   %W     Number of times the process was swapped out of main memory.
   %c     Number of times the process was context-switched involuntarily (because the time slice expired).
   %w     Number of waits: times that the program was context-switched voluntarily, for instance while waiting for an I/O operation
          to complete.

   I/O
   %I     Number of file system inputs by the process.
   %O     Number of file system outputs by the process.
   %r     Number of socket messages received by the process.
   %s     Number of socket messages sent by the process.
   %k     Number of signals delivered to the process.
   %C     (Not in tcsh.) Name and command-line arguments of the command being timed.
   %x     (Not in tcsh.) Exit status of the command.

詳しくはマニュアルページをご覧ください。

編集#1:あなたの質問

自動的に出力を表示する問題は、csh / tcshのこの環境変数の設定が原因であることがわかりました。

tcsh のマニュアルページから

   The time shell variable can be set to execute the time builtin command 
     after the completion of any process that takes more  than a given number 
     of CPU seconds.

はい

時間を5秒に設定します。

$ set time=5

確認する:

$ set|grep time
time    5

テストを受けてください:

$ bash -c "while [ 1 ];do echo hi; done"
hi
hi
...
...waited ~5 seconds, then Ctrl-C to stop it

5.650u 1.471s 0:09.68 73.5% 0+0k 0+0io 0pf+0w

実行中のジョブが変数に設定された秒数よりも多くのCPU時間を費やしている場合にのみ、出力が表示されます$time

引用する

おすすめ記事