From 45349e18ed1e2aa41aa5839a1b70bd9192161e1b Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 23 Apr 2022 20:37:03 +0200 Subject: [PATCH] JVM independence, no line numbers anymore --- src/main/java/de/steamwar/Agent.java | 12 +-------- src/main/java/de/steamwar/OpenJ9.java | 20 +++++++++++++++ src/main/java/de/steamwar/Sampler.java | 35 ++++++++++++++++++-------- 3 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 src/main/java/de/steamwar/OpenJ9.java diff --git a/src/main/java/de/steamwar/Agent.java b/src/main/java/de/steamwar/Agent.java index 1e2aa26..05f9344 100644 --- a/src/main/java/de/steamwar/Agent.java +++ b/src/main/java/de/steamwar/Agent.java @@ -1,12 +1,6 @@ package de.steamwar; -import com.ibm.jvm.Dump; -import com.ibm.jvm.InvalidDumpOptionException; - -import java.io.File; import java.lang.instrument.Instrumentation; -import java.util.logging.Level; -import java.util.logging.Logger; public class Agent { private Agent() {} @@ -31,11 +25,7 @@ public class Agent { sampler = null; break; case "heap": - try { - Dump.heapDumpToFile(new File(Main.jarPath.getParentFile(), "heap.phd").getPath()); - } catch (InvalidDumpOptionException e) { - Logger.getGlobal().log(Level.WARNING, "Could not perform heap dump", e); - } + OpenJ9.heapdump(); break; } } diff --git a/src/main/java/de/steamwar/OpenJ9.java b/src/main/java/de/steamwar/OpenJ9.java new file mode 100644 index 0000000..ada2f2d --- /dev/null +++ b/src/main/java/de/steamwar/OpenJ9.java @@ -0,0 +1,20 @@ +package de.steamwar; + +import com.ibm.jvm.Dump; +import com.ibm.jvm.InvalidDumpOptionException; + +import java.io.File; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class OpenJ9 { + private OpenJ9() {} + + public static void heapdump() { + try { + Dump.heapDumpToFile(new File(Main.jarPath.getParentFile(), "heap.phd").getPath()); + } catch (InvalidDumpOptionException e) { + Logger.getGlobal().log(Level.WARNING, "Could not perform heap dump", e); + } + } +} diff --git a/src/main/java/de/steamwar/Sampler.java b/src/main/java/de/steamwar/Sampler.java index d1efc91..874c118 100644 --- a/src/main/java/de/steamwar/Sampler.java +++ b/src/main/java/de/steamwar/Sampler.java @@ -10,18 +10,23 @@ import java.util.concurrent.locks.LockSupport; public class Sampler { public static final long SAMPLING_SPEED = 1000000; - public static final double FILTER = 0.005; + public static final double FILTER = 0.01; private static final Set waitingMethods = new HashSet<>(); static { - waitingMethods.add("io.netty.channel.epoll.Native.epollWait:-2"); - waitingMethods.add("io.netty.channel.epoll.Native.epollWait0:-2"); - waitingMethods.add("org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read:248"); - waitingMethods.add("com.ibm.lang.management.internal.MemoryNotificationThread.processNotificationLoop:-2"); - waitingMethods.add("net.minecrell.terminalconsole.SimpleTerminalConsole.readCommands:180"); - waitingMethods.add("sun.nio.ch.SocketDispatcher.read0:-2"); - waitingMethods.add("openj9.internal.tools.attach.target.IPC.waitSemaphore:-2"); - waitingMethods.add("sun.nio.ch.Net.poll:-2"); + waitingMethods.add("io.netty.channel.epoll.Native.epollWait"); + waitingMethods.add("io.netty.channel.epoll.Native.epollWait0"); + waitingMethods.add("org.bukkit.craftbukkit.libs.jline.internal.NonBlockingInputStream.read"); + waitingMethods.add("com.ibm.lang.management.internal.MemoryNotificationThread.processNotificationLoop"); + waitingMethods.add("net.minecrell.terminalconsole.SimpleTerminalConsole.readCommands"); + waitingMethods.add("sun.nio.ch.SocketDispatcher.read0"); + waitingMethods.add("openj9.internal.tools.attach.target.IPC.waitSemaphore"); + waitingMethods.add("sun.nio.ch.Net.poll"); + waitingMethods.add("java.lang.ProcessHandleImpl.waitForProcessExit0"); + waitingMethods.add("java.io.FileInputStream.readBytes"); + waitingMethods.add("java.util.concurrent.locks.LockSupport.parkNanos"); + waitingMethods.add("sun.awt.X11.XToolkit.waitForEvents"); + waitingMethods.add("java.lang.ref.Reference.waitForReferencePendingList"); } private static final List omittedMethods = new ArrayList<>(); @@ -29,6 +34,16 @@ public class Sampler { omittedMethods.add("java.lang.reflect.Method.invoke"); omittedMethods.add("java.lang.Thread.run"); omittedMethods.add("jdk.internal"); + + omittedMethods.add("java.util.stream"); + omittedMethods.add("java.util.Iterator.forEachRemaining"); + omittedMethods.add("java.lang.Iterable.forEach"); + omittedMethods.add("java.util.Spliterators"); + omittedMethods.add("java.util.ArrayList$ArrayListSpliterator"); + omittedMethods.add("java.util.AbstractList$RandomAccessSpliterator"); + omittedMethods.add("java.util.ArrayList.forEach"); + omittedMethods.add("java.util.Map.forEach"); + omittedMethods.add("java.util.concurrent"); } private final Map traces = new HashMap<>(); @@ -109,7 +124,7 @@ public class Sampler { String[] ids = new String[stack.length]; for(int i = 0; i < stack.length; i++) { StackTraceElement ste = stack[i]; - String id = ste.getClassName() + "." + ste.getMethodName() + ":" + ste.getLineNumber(); + String id = ste.getClassName() + "." + ste.getMethodName(); ids[i] = id; if (waitingMethods.contains(id))