Questo potrebbe essere un po 'vecchio, ma ecco cosa ho fatto per unire un po' top e jstack insieme. Ho usato due script, ma sono sicuro che tutto ciò potrebbe essere fatto in uno.
In primo luogo, salvare l'output dei top con i pid per i miei thread Java in un file e salvare l'output jstack in un altro file:
#!/bin/sh
top -H -b -n 1 | grep java > /tmp/top.log
jstack -l `ps fax | grep java | grep tomcat | sed "s/ *\([0-9]*\) .*/\1/g"` > /tmp/jstack.log
Poi io uso uno script perl per chiamare lo script bash (chiamato cpu-java.sh qui) e un pò unire i due file (/tmp/top.log e /tmp/jstack.log):
#!/usr/bin/perl
system("sh cpu-java.sh");
open LOG, "/tmp/top.log" or die $!;
print "PID\tCPU\tMem\tJStack Info\n";
while ($l = <LOG>) {
$pid = $l;
$pid =~ s/root.*//g;
$pid =~ s/ *//g;
$hex_pid = sprintf("%#x", $pid);
@values = split(/\s{2,}/, $l);
$pct = $values[4];
$mem = $values[5];
open JSTACK, "/tmp/jstack.log" or die $!;
while ($j = <JSTACK>){
if ($j =~ /.*nid=.*/){
if ($j =~ /.*$hex_pid.*/){
$j =~ s/\n//;
$pid =~ s/\n//;
print $pid . "\t" . $pct . "\t" . $mem . "\t" . $j . "\n";
}
}
}
close JSTACK;
}
close LOG;
L'uscita mi aiuta a scoprire che le discussioni stanno occupando la mia cpu :
PID CPU Mem JStack Info
22460 0 8.0 "main" prio=10 tid=0x083cb800 nid=0x57bc runnable [0xb6acc000]
22461 0 8.0 "GC task thread#0 (ParallelGC)" prio=10 tid=0x083d2c00 nid=0x57bd runnable
22462 0 8.0 "GC task thread#1 (ParallelGC)" prio=10 tid=0x083d4000 nid=0x57be runnable
22463 0 8.0 "GC task thread#2 (ParallelGC)" prio=10 tid=0x083d5800 nid=0x57bf runnable
22464 0 8.0 "GC task thread#3 (ParallelGC)" prio=10 tid=0x083d7000 nid=0x57c0 runnable
...
Quindi posso tornare a /tmp/jstack.log e dare un'occhiata alla traccia dello stack per il thread problematico e cercare di capire cosa sta succedendo da lì. Ovviamente questa soluzione è dipendente dalla piattaforma, ma dovrebbe funzionare con la maggior parte dei tipi di * nix e alcuni tweaking qua e là.
supererà dare informazioni discussioni java ?? –
Questo non è il thread ma il processo. – OscarRyz
@OscarRyz, -H indica i thread in cima all'elenco (nativi). –