Écriture d’un journal d’utilisation du processeur / de la RAM sur une période donnée pour le déposer sur CentOS

8

Je cherche une application ou une ligne de code qui me permette d'observer un processus, de sauvegarder les informations dans un certain nombre de variables, puis de placer les informations collectées dans un fichier.

J'ai essayé avec des variations de top mais pas de chance. J'utilise plusieurs serveurs virtuels CentOS, la machine virtuelle est une RAM de 2 Go, 2 processeurs.

Un script qui fonctionne sur une période de temps spécifiée tout en écrivant des lignes avec les informations sur un fichier texte afin qu'à la fin je puisse avoir une sorte de tableau avec les données fonctionnerait.

Je vais stresser le serveur, et j'aimerais avoir les données pour faire des statistiques.

keponk
la source

Réponses:

11

Le standard ps est assez.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

résultat:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

Le premier champ est l'utilisation du processeur en%, le second est l'utilisation de la mémoire physique en kilo-octets.

whitequark
la source
C’est parfait, j’avais déjà fait un long script pour nettoyer toutes les données d’une sortie par lot, mais la solution est simple, efficace et efficace, j’apprécie beaucoup, merci!
keponk
à la fin, j'ai continué à utiliser mon script, puisque ps me donne la moyenne de charge qui est normalement identique à% du processeur mais qui n'est pas une règle, plus d'informations à ce sujet dans une recherche rapide sur Google
keponk
1
Le% CPU ici n'est pas le% utilisé sur l'intervalle, mais le pourcentage moyen sur toute la durée d'exécution du programme. Je crois que c'est trompeur.
Will Sewell
1

je voudrais suggerer sadc / sar.

Dennis Williamson
la source
N'est-ce pas seulement à l'échelle du système?
whitequark
@whitequark: Cela dépend de la version de sar. Certaines versions utilisent sar -x PID d'autres utilisent pidstat -p PID.
Dennis Williamson
Bien que cela puisse théoriquement répondre à la question, ce serait préférable pour inclure les parties essentielles de la réponse ici, et fournir le lien pour référence.
saji89
1

Si vous vous souciez du timing précis et que vous voulez un processeur en pourcentage:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'
Aalex Gabi
la source
0

Vous essayez d'observer combien de temps CPU est requis par un processus particulier.

J'allais suggérer Outil statistique de CPU pour CentOS? mais cela est valable pour tout le système, pas pour un seul processus.

Tout processus affichera le temps CPU dans la sortie de ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 correspond aux heures / minutes / secondes du processeur. Cela va s'accumuler.
  • Vous aurez besoin d'autorisations pour voir cela si l'utilisateur n'est pas vous.
  • Une fois que cette valeur dépasse un jour, le format change. au dessus c'est 2 jours. Votre routine d'analyse devra gérer cela.

À ce stade, analysez la sortie avec Python, travaillez avec une date mathématique et vous êtes en or.

Kevin J. Rice
la source