Capturer l'utilisation du processeur et de la mémoire de manière dynamique
-
03-07-2019 - |
Question
J'exécute un script shell pour exécuter une application c ++, qui mesure les performances d'une API. Je peux capturer la latence (temps nécessaire pour retourner une valeur pour un ensemble de paramètres donné) de l'API, mais je souhaite également capturer l'utilisation du processeur et de la mémoire à des intervalles de 5 à 10 secondes, par exemple.
existe-t-il un moyen de le faire sans trop affecter les performances du système et cela aussi dans le même script? J'ai trouvé de nombreux exemples où l'on peut faire en dehors (indépendamment) du script que nous exécutons; mais pas celui où nous pouvons faire dans le même script.
La solution
Je suggérerais d'utiliser la commande time et également la commande vmstat . La première utilisera l’exécution de l’exécutable par la CPU et la seconde, une sauvegarde périodique (c’est-à-dire une fois par seconde) de la CPU / mémoire / E / S du système.
Exemple:
time dd if=/dev/zero bs=1K of=/dev/null count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 0.738194 seconds, 1.4 GB/s
0.218u 0.519s 0:00.73 98.6% 0+0k 0+0io 0pf+0w <== that's time result
Autres conseils
Si vous souhaitez capturer l'utilisation du processeur et des mémoires de manière dynamique pour l'ensemble d'une boîte Linux, la commande suivante peut également vous aider:
CPU
vmstat -n 15 10| awk '{now=strftime("%Y-%m-%d %T "); print now free -m -s 10 10 | awk '{now=strftime("%Y-%m-%d %T "); print now <*>}'> DataDumpMemoryfile.csv &
}'> CPUDataDump.csv &
vmstat
est utilisé pour la collecte des compteurs de la CPU
-n
pour la valeur de délai. Dans ce cas, il s'agit de 15, cela signifie que toutes les 15 secondes, les statistiques seront collectées.
then 10
est le nombre d'intervalles, il y aurait 10 itérations dans cet exemple
awk '{now = strftime ("% Y-% m-% d% T"); print now $ 0} '
ceci videra l'horodatage de chaque itération
à la fin, le fichier de vidage avec & amp;
pour la suite
Mémoire
<*> free
est destiné à la collecte des statistiques de mem
-m
c'est pour les unités de mémoire (vous pouvez utiliser -b
pour les octets, -k
pour les kilo-octets, - g
pour les gigaoctets)
then 10
est le nombre d'intervalles (il y aurait 10 itérations dans cet exemple)
awk '{now = strftime ("% Y-% m-% d% T"); print now $ 0} '
ceci videra l'horodatage de chaque itération
à la fin, le dump & amp;
pour la suite