Question

J'en cours JMètre tests sur un processus Java pour déterminer la réactivité d'une application Web sous charge (plus de 500 utilisateurs).JMeter donnera le temps de réponse pour chaque requête Web, et j'ai écrit un script pour envoyer une requête ping au gestionnaire Tomcat toutes les X secondes, ce qui me donnera la taille actuelle du tas JVM.

J'aimerais collecter des statistiques sur le serveur sur le % de CPU utilisé par Tomcat.J'ai essayé de le faire dans un script shell en utilisant ps comme ça:

PS_RESULTS=`ps -o pcpu,pmem,nlwp -p $PID`

...exécuter la commande toutes les X secondes et ajouter les résultats à un fichier texte.(pour tous ceux qui se demandent, pmem = % d'utilisation de la mémoire et nlwp est le nombre de threads)

Cependant, j'ai constaté que cela donne une définition différente du "% d'utilisation du processeur" que je souhaiterais - selon les pages de manuel de ps, pcpu est défini comme:

utilisation du processeur du processus au format "##.#".Il s'agit du temps CPU utilisé divisé par le temps d'exécution du processus (rapport temps CPU/temps réel), exprimé en pourcentage.

Autrement dit, pcpu me donne le% d'utilisation du processeur pour le processus pour le durée de vie du processus.

Puisque je souhaite prélever un échantillon toutes les X secondes, j'aimerais collecter l'utilisation du processeur du processus à l'heure actuelle uniquement - de la même manière que top me donnerait (utilisation du processeur du processus depuis la dernière mise à jour).

Comment puis-je collecter cela à partir d'un script shell ?

Était-ce utile?

La solution

Utiliser top -b (et d'autres commutateurs si vous souhaitez des sorties différentes).Il se contentera de vider la sortie standard au lieu de sauter dans une fenêtre Curses.

Autres conseils

L'outil le plus utile que j'ai trouvé pour surveiller un serveur tout en effectuant un test tel que JMeter est dstat.Il vous donne non seulement une gamme de statistiques du serveur, mais il génère également des sorties au format CSV pour une importation facile dans une feuille de calcul et vous permet d'étendre l'outil avec des modules écrits en Python.

Charge utilisateur : top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $2}' |sed 's/.[^.]*$//'Charge du système : top -b -n 2 |grep Cpu |tail -n 1 |awk '{print $3}' |sed 's/.[^.]*$//'Charge à vide : top -b -n 1 |grep Cpu |tail -n 1 |awk '{print $5}' |sed 's/.[^.]*$//'

Chaque résultat est une décimale ronde.

De mémoire, j'utiliserais la vue du système de fichiers /proc de l'état du système - Regardez homme 5 proc pour voir le format de l'entrée pour /proc/PID/stat, qui contient les informations sur l'utilisation totale du processeur, et utilisez /proc/stat pour obtenir des informations globales sur le système.Pour obtenir l'utilisation de « l'heure actuelle », vous voulez probablement dire « CPU utilisé au cours des N dernières secondes » ;prenez deux échantillons à une courte distance l’un de l’autre pour voir le taux actuel de consommation du processeur.Vous pouvez ensuite transformer ces valeurs en quelque chose d'utile.En réalité, il s'agit probablement plus d'un travail Perl/Ruby/Python que d'un pur script shell.

Vous pourrez peut-être obtenir les données approximatives que vous recherchez avec /proc/PID/status, qui donne une moyenne de sommeil pour le processus.Des données assez grossières cependant.

utilisez également 1 comme nombre d'itérations, afin que vous obteniez l'instantané actuel sans attendre d'en obtenir un autre dans le délai de $.

top -b -n 1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top