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