JVM independence, no line numbers anymore
Dieser Commit ist enthalten in:
Ursprung
45c50a8838
Commit
45349e18ed
@ -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;
|
||||
}
|
||||
}
|
||||
|
20
src/main/java/de/steamwar/OpenJ9.java
Normale Datei
20
src/main/java/de/steamwar/OpenJ9.java
Normale Datei
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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<String> 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<String> 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<String, Trace> 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))
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren