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:
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.
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).
$ 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.
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
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
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.
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.
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
.