Temps d'exécution et ressources après les process en cours depuis si longtime

Cela pourrait être une question fondamentale, mais je n'arrive pas à find une réponse. J'utilise RHEL6. Après avoir exécuté n'importe quel process qui prend un time CPU important, j'obtiens une ligne qui indique (je suppose) l'utilisation de l'exécution et de l'E / S automatiquement. Il se lit comme suit:

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

J'ai les questions suivantes:

  1. Comment interpréter chaque champ de ce message? Je peux deviner un peu de time, l'utilisation d'IO et peut être l'utilisation du processeur … mais je ne suis pas sûr.
  2. Qu'est-ce qui imprime réellement cette ligne? Est-ce la coquille? Est-ce l'émulateur de terminal? Y at-il un démon en cours d'exécution en prenant soin de cela? Quel est le nom de cette fonctionnalité / service / quel qu'il soit.
  3. Est-il possible de contrôler ce message? Comme définir le seuil d'utilisation du processeur pour l'imprimer?
  4. Puis-je append des informations supplémentaires? Comme le path absolu du process, l'utilisation de la memory de pointe, l'utilisation maximale du disque, etc …

Astuce pour déboguer ce qui se passe

Je suggère d'activer la fonction de debugging de votre shell, en supposant que vous utilisez Bash.

 $ set -x 

Cette sortie vous montrera ce qui se passe dans les coulisses lorsque vous exécutez une command qui produit cette sortie.

Le résultat

Cette sortie provient de la command time /usr/bin/time est préfixée à chaque command exécutée. Pour get cette sortie, je suppose que vous utilisez C-shell (csh) ou Turbo C-shell (tcsh).

Exemple

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

La raison pour laquelle je soupçonne que c'est un shell tcsh est que lorsque j'exécute la command /usr/bin/time dans un shell Bash, la sortie ressemble à ceci:

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

La sortie peut être contrôlée à l'aide du commutateur -f ou --format , de sorte que la sortie que vous voyez pourrait également être effectuée dans Bash, mais devrait être effectuée intentionnellement.

Signification de la production

Si vous exécutez la command /usr/bin/time en mode verbeux, ( -v ), vous obtiendrez tous les détails sur chaque champ comme ceci:

 $ /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 

Si vous alignez la sortie d'origine:

 77410.101u 124.968s 1:42:43.49 657.9% 0+0k 0+1353384io 0pf+0w ^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^ ^^^^^^ ^^^^ ^^^^^^^^^^^ ^^^^^^ 1 2 3 4 5 6 7 
  1. Temps d'utilisation (secondes)
  2. Temps système (secondes)
  3. Temps écoulé (horloge murale) (h: mm: ss ou m: ss)
  4. Pourcentage de CPU ce travail a obtenu
  5. Taille moyenne du text partagé (kilo-octets) + Taille moyenne des données non partagées (kilo-octets)
  6. Nombre d'inputs du système de files par le process + Nombre de sorties du système de files par le process
  7. Nombre de défauts de page majeurs survenus pendant l'exécution du process. Ce sont des erreurs où la page doit être lue à partir du disque + Nombre de fois que le process a été échangé de la memory principale

Vous pouvez manuellement faire le même format comme ceci:

 $ /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 

Personnaliser la sortie

Une fois que vous êtes en mesure de déterminer où l'appel à /usr/bin/time est fait, vous pouvez personnaliser la sortie en prenant un pic sur la page man pour le time . Il y a beaucoup d'options qui peuvent être incluses dans cette sortie.

 $ man time 

extrait

  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. 

Voir la page de manuel pour plus de détails.

EDIT # 1: Votre problème

Votre question sur la sortie affichée automatiquement est provoquée par le réglage de cette variable d'environnement dans csh / tcsh.

depuis la page de manuel 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. 

Exemple

Réglez le time sur 5 secondes.

 $ set time=5 

Confirmer:

 $ set|grep time time 5 

Testez-le:

 $ 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 

La sortie ne s'affichera que si la tâche que vous exécutez consum plus que le nombre de secondes du time CPU défini par la variable $time .

Les references

  • page de time