8197425: Liveset information for Old Object sample event

Reviewed-by: mgronlun, ehelin
This commit is contained in:
Erik Gahlin 2018-06-28 15:17:44 +02:00
parent 3567e9c1d5
commit 7f3a801cae
4 changed files with 14 additions and 4 deletions

View File

@ -39,6 +39,7 @@ import java.util.List;
import jdk.jfr.FlightRecorder;
import jdk.jfr.Recording;
import jdk.jfr.internal.JVM;
import jdk.jfr.internal.SecuritySupport;
import jdk.jfr.internal.SecuritySupport.SafePath;
import jdk.jfr.internal.Utils;
@ -65,9 +66,17 @@ abstract class AbstractDCmd {
return result.toString();
}
public String getPid() {
// Invoking ProcessHandle.current().pid() would require loading more
// classes during startup so instead JVM.getJVM().getPid() is used.
// The pid will not be exposed to running Java application, only when starting
// JFR from command line (-XX:StartFlightRecordin) or jcmd (JFR.start and JFR.check)
return JVM.getJVM().getPid();
}
protected final SafePath resolvePath(Recording recording, String filename) throws InvalidPathException {
if (filename == null) {
return makeGenerated(recording, Paths.get("."));
return makeGenerated(recording, Paths.get("."));
}
Path path = Paths.get(filename);
if (Files.isDirectory(path)) {

View File

@ -80,7 +80,7 @@ final class DCmdCheck extends AbstractDCmd {
if (!verbose && recordings.isEmpty()) {
println("No available recordings.");
println();
println("Use JFR.start to start a recording.");
println("Use jcmd " + getPid() + " JFR.start to start a recording.");
return;
}
boolean first = true;

View File

@ -220,12 +220,13 @@ final class DCmdStart extends AbstractDCmd {
if (name != null) {
recordingspecifier = "name=" + quoteIfNeeded(name);
}
print("Use JFR." + cmd + " " + recordingspecifier + " " + fileOption + "to copy recording data to file.");
print("Use jcmd " + getPid() + " JFR." + cmd + " " + recordingspecifier + " " + fileOption + "to copy recording data to file.");
println();
}
return getResult();
}
// Instruments JDK-events on class load to reduce startup time
private void initializeWithForcedInstrumentation(Map<String, String> settings) {
if (!hasJDKEvents(settings)) {

View File

@ -66,7 +66,7 @@ public class TestJcmdStartStopDefault {
// Use JFR.dump name=recording-1 filename=FILEPATH to copy recording data to file.
String stdout = output.getStdout();
Pattern p = Pattern.compile(".*Use JFR.dump name=(\\S+).*", Pattern.DOTALL);
Pattern p = Pattern.compile(".*Use jcmd \\d+ JFR.dump name=(\\S+).*", Pattern.DOTALL);
Matcher m = p.matcher(stdout);
Asserts.assertTrue(m.matches(), "Could not parse recording name");
String name = m.group(1);