Je voudrais surveiller le nombre de threads utilisés par un processus spécifique sous Linux. Existe-t-il un moyen simple d'obtenir ces informations sans affecter les performances du processus?
linux
multithreading
monitor
Couler
la source
la source
Réponses:
essayer
ou htop
la source
1
car il imprime une ligne commeUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
pour l'en-tête de tableau.wc
alors que vous le pouviezps -o thcount <pid>
? Voyez cette réponse .Pour obtenir le nombre de threads pour un pid donné:
Où
nlwp
représente le nombre de processus légers (threads) . Doncps
aliasnlwp
àthcount
, ce qui signifie quefonctionne aussi.
Si vous souhaitez surveiller le nombre de threads, utilisez simplement
watch
:Pour obtenir la somme de tous les threads en cours d'exécution dans le système:
la source
watch
commande. Cependant, notez que l'utilisationthcount
peut échouer pour certains (Red Hat ...), même si cela anlwp
fonctionné pour moi.Chaque thread d'un processus crée un répertoire sous
/proc/<pid>/task
. Comptez le nombre de répertoires et vous avez le nombre de threads.la source
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Remplacez simplement le <PID> par votre ID de processus que vous pouvez obtenirtop
ou en utilisantps
la source
ps -eLf
sur le shell vous donnera une liste de tous les threads et processus en cours d'exécution sur le système. Ou, vous pouvez exécuter latop
commande puis appuyer sur «H» pour basculer les listes de threads.la source
-p
à cela si nécessaire, ou quoi que ce soit d'autre. C'est le minimum dont vous avez besoin pour voir la liste des fils.JStack est assez peu coûteux - une option serait de diriger la sortie via grep pour trouver les threads actifs, puis de passer par wc -l.
Plus graphiquement, JConsole, qui affiche le nombre de threads pour un processus donné.
la source
Si tu utilises:
Vous devez soustraire 1 au résultat, car l'une des lignes "wc" compte les en-têtes de la commande "ps".
la source
ps
en- tête comme l'un des threads.Voici une commande qui affiche le nombre de threads d'un processus donné:
Contrairement aux autres
ps
réponses basées, il n'y a ici pas besoin de soustraire1
de sa sortie car il n'y a pas deps
ligne d'en-tête grâce à l'-o pid=
option.la source
$ ps H p pid-id
H - Répertorie tous les threads individuels d'un processus
ou
$cat /proc/pid-id/status
pid-id est l'ID de processus
par exemple .. (tronqué la sortie ci-dessous)
la source
Les nouvelles distributions JDK sont livrées avec JConsole et VisualVM. Les deux sont des outils fantastiques pour obtenir les détails sales d'un processus Java en cours d'exécution. Si vous devez le faire par programme, examinez JMX.
la source
jvmtop peut afficher le nombre de threads jvm actuel à côté d'autres métriques.
la source
Le moyen le plus simple est d'utiliser "htop". Vous pouvez installer "htop" (une version plus sophistiquée de top) qui vous montrera tous vos cœurs, processus et utilisation de la mémoire.
Appuyez sur "Shift + H" pour afficher tout le processus ou appuyez à nouveau pour le masquer. Appuyez sur la touche "F4" pour rechercher le nom de votre processus.
Installation sur Ubuntu ou Debian:
Installation sur Redhat ou CentOS:
Si vous voulez compiler "htop" à partir du code source, vous le trouverez ici .
la source
Si vous essayez de connaître le nombre de threads utilisant cpu pour un pid donné, j'utiliserais:
la source
Si vous êtes intéressé par ces threads qui sont vraiment actifs - comme faire quelque chose (pas bloqué, pas timed_waiting, ne pas signaler "thread running" mais vraiment attendre qu'un flux donne des données) par opposition à rester inactif mais en direct - - alors vous pourriez être intéressé par jstack-active .
Ce simple script bash s'exécute
jstack
puis filtre tous les threads qui, par heuristique, semblent être inactifs, vous montrant des traces de pile pour les threads qui consomment réellement des cycles CPU.la source
VisualVM peut afficher des états clairs des threads d'un processus JVM donné
la source
Si vous voulez le nombre de threads par utilisateur dans un système Linux, vous devez utiliser:
où comme utiliser le nom d'utilisateur souhaité.
la source