man ps
en NOTES
section.
CPU usage is currently expressed as the percentage of time spent running
during the entire lifetime of a process. This is not ideal, and it does not
conform to the standards that ps otherwise conforms to. CPU usage is
unlikely to add up to exactly 100%.
Et, suppose que vous savez, mais vous pouvez aussi faire:
top -p <PID>
Edit : quant à votre commentaire sur une autre réponse;
" Hmm ouais je me demande comment obtenir ça (le pourcentage de CPU instantané) de ps "
Réponse courte: vous ne pouvez pas.
Pourquoi est-ce?
C'est comme demander à quelqu'un de calculer la vitesse d'une voiture à partir d'une image.
While top
est un outil de surveillance, ps
un outil d’instantané. Pensez-y comme ceci: à un moment donné, un processus utilise ou non le processeur. Ainsi, vous avez 0% ou 100% de charge à ce moment précis.
Donner: Si ps
devrait donner une utilisation instantanée du processeur, ce serait 0% ou 100%.
top
Par contre, conservez les numéros d'interrogation et calculez la charge dans le temps.
ps
aurait pu donner l'utilisation actuelle - mais cela nécessiterait de lire les données plusieurs fois et de dormir entre chaque lecture. Ce n'est pas.
Calcul pour ps% cpu
ps
calcule l'utilisation du processeur de la manière suivante:
temps de disponibilité = durée totale d'activité du système.
ps_time = heure de début du processus mesurée en secondes à partir du démarrage.
pu_time = le temps total utilisé par la CPU.
;; Le processus Seconds a été lancé:
secondes = disponibilité - ps_time
;; Usage:
cpu_usage = pu_time * 1000 / seconds
print: cpu_usage / 10 "." cpu_usage% 10
Exemple:
disponibilité = 344,545
ps_time = 322,462
pu_time = 3 383
secondes = 344 545 - 322 462 = 22 083
cpu_usage = 3 383 * 1 000/22 083 = 153
impression: 153/10 "." 153% 10 => 15,3
Le nombre imprimé est le suivant: heure à laquelle le processus a utilisé le processeur pendant sa durée de vie. Comme dans l'exemple ci-dessus. Il l'a fait dans 15,3% de sa vie. Dans 84,7% des cas, il n’a pas eu de bogue sur le processeur.
Récupération de données
ps
, ainsi que top
, utilise les données des fichiers stockés sous /proc/
- ou le pseudo système de fichiers d’informations de processus .
Vous avez à la racine des fichiers /proc/
qui contiennent diverses informations sur l’état général du système. De plus, chaque processus a son propre sous-dossier dans /proc/<PID>/
lequel des données spécifiques au processus sont stockées. Ainsi, par exemple, le processus de votre question comportait un dossier dans /proc/3038/
.
Lorsqu'il ps
calcule l'utilisation du processeur, il utilise deux fichiers:
/ proc / uptime Durée de fonctionnement du système (secondes) et temps passé en processus d’inactivité (secondes).
/ proc / [PID] / stat Informations d'état sur le processus.
- Depuis,
uptime
il utilise la première valeur ( temps de disponibilité ).
- De
[PID]/stat
il utilise les éléments suivants:
# Nom Description
14 heures de temps CPU consacrées au code utilisateur, mesurées en un tournemain
15 fois le temps CPU passé dans le code du noyau, mesuré en un tournemain
16 temps CPU en code utilisateur, y compris ceux des enfants
17 cstime Temps CPU passé dans le code du noyau, y compris le temps des enfants
22 heure de début Heure à laquelle le processus a commencé, mesurée en deux minutes
Un jiffie est le tic-tac de l'horloge. Donc, en outre, il utilise diverses méthodes, à savoir sysconf(_SC_CLK_TCK)
,, pour obtenir le système Hertz (nombre de ticks par seconde) - en utilisant finalement 100 comme solution de secours après avoir épuisé les autres options.
Donc, si utime
est 1234 et Hertz est 100 alors:
seconds = utime / Hertz = 1234 / 100 = 12.34
Le calcul réel est fait par:
total_time = utime + stime
IF include_dead_children
total_time = total_time + cutime + cstime
ENDIF
seconds = uptime - starttime / Hertz
pcpu = (total_time * 1000 / Hertz) / seconds
print: "%CPU" pcpu / 10 "." pcpu % 10
Exemple (sortie d'un script Bash personnalisé):
$ ./psw2 30894
System information
uptime : 353,512 seconds
idle : 0
Process information
PID : 30894
filename : plugin-containe
utime : 421,951 jiffies 4,219 seconds
stime : 63,334 jiffies 633 seconds
cutime : 0 jiffies 0 seconds
cstime : 1 jiffies 0 seconds
starttime : 32,246,240 jiffies 322,462 seconds
Process run time : 31,050
Process CPU time : 485,286 jiffies 4,852 seconds
CPU usage since birth: 15.6%
Calcul de la charge "actuelle" avec ps
C'est un (peu?) Effort louche mais OK. Essayons.
On pourrait utiliser les temps fournis par ps
et calculer l’utilisation du processeur à partir de cela. En y réfléchissant, cela pourrait être plutôt utile, avec quelques limitations.
Cela peut être utile pour calculer l'utilisation du processeur sur une période plus longue. C'est-à-dire que vous souhaitez surveiller la charge de processeur moyenne de plugin-container
Firefox tout en effectuant certaines tâches liées à Firefox.
En utilisant les résultats de:
$ ps -p -o cputime, etimes
CODE HEADER DESCRIPTION
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format. (alias time).
etime ELAPSED elapsed time since the process was started, [DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in seconds.
J'utilise etime
plus etimes
dans cet exemple, sur des calculs, pour être un peu plus clair. Aussi, j'ajoute% cpu pour "fun". En c’est-à-dire un script bash, on pourrait évidemment utiliser etimes
- ou mieux lire à partir de /proc/<PID>/
etc.
Start:
$ ps -p 30894 -o %cpu,cputime,etime,etimes
%CPU TIME ELAPSED ELAPSED
5.9 00:13:55 03:53:56 14036
End:
%CPU TIME ELAPSED ELAPSED
6.2 00:14:45 03:56:07 14167
Calculate times:
13 * 60 + 55 = 835 (cputime this far)
3 * 3,600 + 53 * 60 + 56 = 14,036 (time running this far)
14 * 60 + 45 = 885 (cputime at end)
3 * 3,600 + 56 * 60 + 7 = 14,167 (time running at end)
Calculate percent load:
((885 - 835) / (14,167 - 14,036)) * 100 = 38
Le processus utilisait le processeur 38% du temps pendant cette période.
Regarde le code
Si vous voulez savoir comment ps
et si vous connaissez un peu le C, faites (on dirait que vous exécutez Gnome Debain deriavnt) - bonne attitude dans le code en ce qui concerne les commentaires, etc.:
apt-get source procps
cd procps*/ps
vim HACKING
top
la surveillance continue - ou une capture instantanée appelée "ps
" avec la charge actuelle du processeur.la source
ps
top -p 3343 -n1 | awk '/ R /{print $10}'
awk
: ing pour lepid
mieux travaillé, comme danstop -p 3343 -n1 | awk '/ 3343 /{print $10}'
top -p $PID -n1 | awk '{if (NR ==8) print $9 }'