Đây có thể là một chút cũ, nhưng đây là những gì tôi đã làm để kết hợp đầu và jstack với nhau. Tôi đã sử dụng hai kịch bản, nhưng tôi chắc chắn rằng tất cả có thể được thực hiện trong một.
Trước tiên, tôi lưu đầu ra của đầu với PID cho chủ đề java của tôi vào một tập tin và lưu đầu ra jstack vào tập tin khác:
#!/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
Sau đó, tôi sử dụng một kịch bản perl để gọi các tập lệnh bash (gọi cpu-java.sh đây) và kinda hợp nhất hai tập tin (/tmp/top.log và /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;
sản lượng giúp tôi để tìm ra các chủ đề được hogging cpu của tôi :
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
...
Sau đó, tôi có thể quay lại /tmp/jstack.log và xem xét dấu vết ngăn xếp cho chuỗi có vấn đề và cố gắng tìm ra những gì đang diễn ra từ đó. Tất nhiên giải pháp này phụ thuộc vào nền tảng, nhưng nó sẽ làm việc với hầu hết các hương vị của * nix và một số tinh chỉnh ở đây và ở đó.
sẽ đầu cung cấp cho chủ đề java thông tin ?? –
Đó không phải là chủ đề mà là quá trình. – OscarRyz
@OscarRyz, -H cho biết đầu đề danh sách (bản địa). –