Esto podría ser un poco viejo, pero esto es lo que hice para fusionar un poco la parte superior y jstack juntos. Usé dos scripts, pero estoy seguro de que todo podría hacerse en uno.
En primer lugar, guardar la salida de la parte superior con los PID para mis hilos de Java en un archivo y guardar la salida jstack en otro archivo:
#!/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
Luego uso un script en perl para llamar a la escritura del golpe (cpu-java.sh llamado aquí) y un poco fusionar los dos archivos (/tmp/top.log y /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;
La salida me ayuda para saber qué temas están acaparando mi 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
...
Luego puedo volver a /tmp/jstack.log y echar un vistazo al seguimiento de la pila para el hilo problemático y tratar de averiguar qué está pasando desde allí. Por supuesto, esta solución depende de la plataforma, pero debería funcionar con la mayoría de los sabores de * nix y algunos ajustes aquí y allá.
rematará dar hebras Java información ?? –
Ese no es el hilo sino el proceso. – OscarRyz
@OscarRyz, -H le dice a los hilos de la lista de los mejores (nativos). –