Making DTraceAsm profiler more robust and fix a defect in all asm profilers
Roman Leventov
leventov.ru at gmail.com
Fri Aug 9 08:18:36 UTC 2019
I propose a patch that does two things:
1) Makes DTraceAsm profiler more robust if there are corrupt lines in the
DTrace output file
2) If there is an I/O error reading any Asm output file, the error is
propagated and printed. Before, a PerfEvents's constructor was called which
invariably led to NPE in AbstractPerfAsmProfiler.java:967, consuming the
actual failure reason. I've removed that constructor.
diff -r 3ceecc6774f4
jmh-core/src/main/java/org/openjdk/jmh/profile/AbstractPerfAsmProfiler.java
---
a/jmh-core/src/main/java/org/openjdk/jmh/profile/AbstractPerfAsmProfiler.java
Tue May 21 15:32:05 2019 +0200
+++
b/jmh-core/src/main/java/org/openjdk/jmh/profile/AbstractPerfAsmProfiler.java
Fri Aug 09 11:14:04 2019 +0300
@@ -968,10 +968,6 @@
}
}
- public PerfEvents(Collection<String> tracedEvents) {
- this(tracedEvents, Collections.<String,
Multiset<Long>>emptyMap(), new IntervalMap<MethodDesc>());
- }
-
public boolean isEmpty() {
return events.isEmpty();
}
diff -r 3ceecc6774f4
jmh-core/src/main/java/org/openjdk/jmh/profile/DTraceAsmProfiler.java
--- a/jmh-core/src/main/java/org/openjdk/jmh/profile/DTraceAsmProfiler.java
Tue May 21 15:32:05 2019 +0200
+++ b/jmh-core/src/main/java/org/openjdk/jmh/profile/DTraceAsmProfiler.java
Fri Aug 09 11:14:04 2019 +0300
@@ -145,6 +145,10 @@
line = line.trim();
line = line.substring(line.indexOf(":profile"));
String[] splits = line.split(" ", 5);
+ if (splits.length < 2) {
+ // Possibly corrupt line
+ continue;
+ }
String sampledPid = splits[1];
if (!sampledPid.equals(pid)) {
@@ -205,7 +209,7 @@
return new PerfEvents(this.events, allEvents, methodMap);
} catch (IOException e) {
- return new PerfEvents(events);
+ throw new RuntimeException(e);
}
}
diff -r 3ceecc6774f4
jmh-core/src/main/java/org/openjdk/jmh/profile/LinuxPerfAsmProfiler.java
---
a/jmh-core/src/main/java/org/openjdk/jmh/profile/LinuxPerfAsmProfiler.java
Tue May 21 15:32:05 2019 +0200
+++
b/jmh-core/src/main/java/org/openjdk/jmh/profile/LinuxPerfAsmProfiler.java
Fri Aug 09 11:14:04 2019 +0300
@@ -267,7 +267,7 @@
return new PerfEvents(this.events, events, methodMap);
} catch (IOException e) {
- return new PerfEvents(events);
+ throw new RuntimeException(e);
}
}
diff -r 3ceecc6774f4
jmh-core/src/main/java/org/openjdk/jmh/profile/WinPerfAsmProfiler.java
---
a/jmh-core/src/main/java/org/openjdk/jmh/profile/WinPerfAsmProfiler.java
Tue May 21 15:32:05 2019 +0200
+++
b/jmh-core/src/main/java/org/openjdk/jmh/profile/WinPerfAsmProfiler.java
Fri Aug 09 11:14:04 2019 +0300
@@ -257,7 +257,7 @@
return new PerfEvents(this.events, events, methodMap);
} catch (IOException e) {
- return new PerfEvents(events);
+ throw new RuntimeException(e);
}
}
More information about the jmh-dev
mailing list