diff --git a/agent/src/main/java/com/taobao/arthas/agent/AgentBootstrap.java b/agent/src/main/java/com/taobao/arthas/agent/AgentBootstrap.java
index 55c8285fb..ea0b22e7a 100644
--- a/agent/src/main/java/com/taobao/arthas/agent/AgentBootstrap.java
+++ b/agent/src/main/java/com/taobao/arthas/agent/AgentBootstrap.java
@@ -1,9 +1,11 @@
package com.taobao.arthas.agent;
import java.arthas.Spy;
-import java.io.*;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
import java.lang.instrument.Instrumentation;
-import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLDecoder;
import java.util.jar.JarFile;
@@ -14,20 +16,9 @@ import java.util.jar.JarFile;
* @author vlinux on 15/5/19.
*/
public class AgentBootstrap {
-
- private static final String ADVICEWEAVER = "com.taobao.arthas.core.advisor.AdviceWeaver";
- private static final String ON_BEFORE = "methodOnBegin";
- private static final String ON_RETURN = "methodOnReturnEnd";
- private static final String ON_THROWS = "methodOnThrowingEnd";
- private static final String BEFORE_INVOKE = "methodOnInvokeBeforeTracing";
- private static final String AFTER_INVOKE = "methodOnInvokeAfterTracing";
- private static final String THROW_INVOKE = "methodOnInvokeThrowTracing";
private static final String RESET = "resetArthasClassLoader";
private static final String ARTHAS_SPY_JAR = "arthas-spy.jar";
- private static final String ARTHAS_CONFIGURE = "com.taobao.arthas.core.config.Configure";
private static final String ARTHAS_BOOTSTRAP = "com.taobao.arthas.core.server.ArthasBootstrap";
- private static final String TO_CONFIGURE = "toConfigure";
- private static final String GET_JAVA_PID = "getJavaPid";
private static final String GET_INSTANCE = "getInstance";
private static final String IS_BIND = "isBind";
private static final String BIND = "bind";
@@ -93,17 +84,8 @@ public class AgentBootstrap {
return arthasClassLoader;
}
- private static void initSpy(ClassLoader classLoader) throws ClassNotFoundException, NoSuchMethodException {
- Class> adviceWeaverClass = classLoader.loadClass(ADVICEWEAVER);
- Method onBefore = adviceWeaverClass.getMethod(ON_BEFORE, int.class, ClassLoader.class, String.class,
- String.class, String.class, Object.class, Object[].class);
- Method onReturn = adviceWeaverClass.getMethod(ON_RETURN, Object.class);
- Method onThrows = adviceWeaverClass.getMethod(ON_THROWS, Throwable.class);
- Method beforeInvoke = adviceWeaverClass.getMethod(BEFORE_INVOKE, int.class, String.class, String.class, String.class, int.class);
- Method afterInvoke = adviceWeaverClass.getMethod(AFTER_INVOKE, int.class, String.class, String.class, String.class, int.class);
- Method throwInvoke = adviceWeaverClass.getMethod(THROW_INVOKE, int.class, String.class, String.class, String.class, int.class);
- Method reset = AgentBootstrap.class.getMethod(RESET);
- Spy.initForAgentLauncher(classLoader, onBefore, onReturn, onThrows, beforeInvoke, afterInvoke, throwInvoke, reset);
+ private static void initSpy() throws NoSuchMethodException {
+ Spy.AGENT_RESET_METHOD = AgentBootstrap.class.getMethod(RESET);
}
private static synchronized void main(String args, final Instrumentation inst) {
@@ -131,7 +113,7 @@ public class AgentBootstrap {
* Use a dedicated thread to run the binding logic to prevent possible memory leak. #195
*/
final ClassLoader agentLoader = getClassLoader(inst, spyJarFile, agentJarFile);
- initSpy(agentLoader);
+ initSpy();
Thread bindingThread = new Thread() {
@Override
@@ -163,21 +145,16 @@ public class AgentBootstrap {
private static void bind(Instrumentation inst, ClassLoader agentLoader, String args) throws Throwable {
/**
*
- * Configure configure = Configure.toConfigure(args);
- * int javaPid = configure.getJavaPid();
- * ArthasBootstrap bootstrap = ArthasBootstrap.getInstance(javaPid, inst);
+ * ArthasBootstrap bootstrap = ArthasBootstrap.getInstance(inst);
*
*/
- Class> classOfConfigure = agentLoader.loadClass(ARTHAS_CONFIGURE);
- Object configure = classOfConfigure.getMethod(TO_CONFIGURE, String.class).invoke(null, args);
- int javaPid = (Integer) classOfConfigure.getMethod(GET_JAVA_PID).invoke(configure);
Class> bootstrapClass = agentLoader.loadClass(ARTHAS_BOOTSTRAP);
- Object bootstrap = bootstrapClass.getMethod(GET_INSTANCE, int.class, Instrumentation.class).invoke(null, javaPid, inst);
+ Object bootstrap = bootstrapClass.getMethod(GET_INSTANCE, Instrumentation.class).invoke(null, inst);
boolean isBind = (Boolean) bootstrapClass.getMethod(IS_BIND).invoke(bootstrap);
if (!isBind) {
try {
ps.println("Arthas start to bind...");
- bootstrapClass.getMethod(BIND, classOfConfigure).invoke(bootstrap, configure);
+ bootstrapClass.getMethod(BIND, String.class).invoke(bootstrap, args);
ps.println("Arthas server bind success.");
return;
} catch (Exception e) {
diff --git a/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java b/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java
index 87f6bddea..9db806a51 100644
--- a/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java
+++ b/boot/src/main/java/com/taobao/arthas/boot/Bootstrap.java
@@ -60,7 +60,7 @@ public class Bootstrap {
private boolean help = false;
- private int pid = -1;
+ private long pid = -1;
private String targetIp = DEFAULT_TARGET_IP;
private int telnetPort = DEFAULT_TELNET_PORT;
private int httpPort = DEFAULT_HTTP_PORT;
@@ -138,7 +138,7 @@ public class Bootstrap {
@Argument(argName = "pid", index = 0, required = false)
@Description("Target pid")
- public void setPid(int pid) {
+ public void setPid(long pid) {
this.pid = pid;
}
@@ -314,8 +314,8 @@ public class Bootstrap {
}
// check telnet/http port
- int telnetPortPid = -1;
- int httpPortPid = -1;
+ long telnetPortPid = -1;
+ long httpPortPid = -1;
if (bootstrap.getTelnetPort() > 0) {
telnetPortPid = SocketUtils.findTcpListenProcess(bootstrap.getTelnetPort());
if (telnetPortPid > 0) {
@@ -329,7 +329,7 @@ public class Bootstrap {
}
}
- int pid = bootstrap.getPid();
+ long pid = bootstrap.getPid();
// select pid
if (pid < 0) {
try {
@@ -651,7 +651,7 @@ public class Bootstrap {
return attachOnly;
}
- public int getPid() {
+ public long getPid() {
return pid;
}
diff --git a/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java b/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java
index 4247e6b79..e33f167d2 100644
--- a/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java
+++ b/boot/src/main/java/com/taobao/arthas/boot/ProcessUtils.java
@@ -28,13 +28,13 @@ public class ProcessUtils {
private static String FOUND_JAVA_HOME = null;
@SuppressWarnings("resource")
- public static int select(boolean v, int telnetPortPid) throws InputMismatchException {
- Map processMap = listProcessByJps(v);
+ public static long select(boolean v, long telnetPortPid) throws InputMismatchException {
+ Map processMap = listProcessByJps(v);
// Put the port that is already listening at the first
if (telnetPortPid > 0 && processMap.containsKey(telnetPortPid)) {
String telnetPortProcess = processMap.get(telnetPortPid);
processMap.remove(telnetPortPid);
- Map newProcessMap = new LinkedHashMap();
+ Map newProcessMap = new LinkedHashMap();
newProcessMap.put(telnetPortPid, telnetPortProcess);
newProcessMap.putAll(processMap);
processMap = newProcessMap;
@@ -70,7 +70,7 @@ public class ProcessUtils {
return -1;
}
- Iterator idIter = processMap.keySet().iterator();
+ Iterator idIter = processMap.keySet().iterator();
for (int i = 1; i <= choice; ++i) {
if (i == choice) {
return idIter.next();
@@ -81,8 +81,8 @@ public class ProcessUtils {
return -1;
}
- private static Map listProcessByJps(boolean v) {
- Map result = new LinkedHashMap();
+ private static Map listProcessByJps(boolean v) {
+ Map result = new LinkedHashMap();
String jps = "jps";
File jpsFile = findJps();
@@ -103,14 +103,14 @@ public class ProcessUtils {
AnsiLog.debug("jps result: " + lines);
- int currentPid = Integer.parseInt(PidUtils.currentPid());
+ long currentPid = Long.parseLong(PidUtils.currentPid());
for (String line : lines) {
String[] strings = line.trim().split("\\s+");
if (strings.length < 1) {
continue;
}
try {
- int pid = Integer.parseInt(strings[0]);
+ long pid = Long.parseLong(strings[0]);
if (pid == currentPid) {
continue;
}
@@ -189,7 +189,7 @@ public class ProcessUtils {
return FOUND_JAVA_HOME;
}
- public static void startArthasCore(int targetPid, List attachArgs) {
+ public static void startArthasCore(long targetPid, List attachArgs) {
// find java/java.exe, then try to find tools.jar
String javaHome = findJavaHome();
diff --git a/common/src/main/java/com/taobao/arthas/common/PidUtils.java b/common/src/main/java/com/taobao/arthas/common/PidUtils.java
index 194ea9e5f..3dd74555a 100644
--- a/common/src/main/java/com/taobao/arthas/common/PidUtils.java
+++ b/common/src/main/java/com/taobao/arthas/common/PidUtils.java
@@ -9,6 +9,7 @@ import java.lang.management.ManagementFactory;
*/
public class PidUtils {
private static String PID = "-1";
+ private static long pid = -1;
static {
// https://stackoverflow.com/a/7690178
@@ -18,6 +19,7 @@ public class PidUtils {
if (index > 0) {
try {
PID = Long.toString(Long.parseLong(jvmName.substring(0, index)));
+ pid = Long.parseLong(PID);
} catch (Throwable e) {
// ignore
}
@@ -30,4 +32,8 @@ public class PidUtils {
public static String currentPid() {
return PID;
}
+
+ public static long currentLongPid() {
+ return pid;
+ }
}
diff --git a/common/src/main/java/com/taobao/arthas/common/SocketUtils.java b/common/src/main/java/com/taobao/arthas/common/SocketUtils.java
index 2673ee48e..28d2c5846 100644
--- a/common/src/main/java/com/taobao/arthas/common/SocketUtils.java
+++ b/common/src/main/java/com/taobao/arthas/common/SocketUtils.java
@@ -17,7 +17,7 @@ public class SocketUtils {
private SocketUtils() {
}
- public static int findTcpListenProcess(int port) {
+ public static long findTcpListenProcess(int port) {
try {
if (OSUtils.isWindows()) {
String[] command = { "netstat", "-ano", "-p", "TCP" };
@@ -28,7 +28,7 @@ public class SocketUtils {
String[] strings = line.trim().split("\\s+");
if (strings.length == 5) {
if (strings[1].endsWith(":" + port)) {
- return Integer.parseInt(strings[4]);
+ return Long.parseLong(strings[4]);
}
}
}
@@ -38,7 +38,7 @@ public class SocketUtils {
if (OSUtils.isLinux() || OSUtils.isMac()) {
String pid = ExecutingCommand.getFirstAnswer("lsof -t -s TCP:LISTEN -i TCP:" + port);
if (!pid.trim().isEmpty()) {
- return Integer.parseInt(pid);
+ return Long.parseLong(pid);
}
}
} catch (Throwable e) {
diff --git a/core/src/main/java/com/taobao/arthas/core/Arthas.java b/core/src/main/java/com/taobao/arthas/core/Arthas.java
index 116555b7f..5bf013529 100644
--- a/core/src/main/java/com/taobao/arthas/core/Arthas.java
+++ b/core/src/main/java/com/taobao/arthas/core/Arthas.java
@@ -29,7 +29,7 @@ public class Arthas {
}
private Configure parse(String[] args) {
- Option pid = new TypedOption().setType(Integer.class).setShortName("pid").setRequired(true);
+ Option pid = new TypedOption().setType(Long.class).setShortName("pid").setRequired(true);
Option core = new TypedOption().setType(String.class).setShortName("core").setRequired(true);
Option agent = new TypedOption().setType(String.class).setShortName("agent").setRequired(true);
Option target = new TypedOption().setType(String.class).setShortName("target-ip");
@@ -50,7 +50,7 @@ public class Arthas {
CommandLine commandLine = cli.parse(Arrays.asList(args));
Configure configure = new Configure();
- configure.setJavaPid((Integer) commandLine.getOptionValue("pid"));
+ configure.setJavaPid((Long) commandLine.getOptionValue("pid"));
configure.setArthasAgent((String) commandLine.getOptionValue("agent"));
configure.setArthasCore((String) commandLine.getOptionValue("core"));
configure.setSessionTimeout((Integer)commandLine.getOptionValue("session-timeout"));
@@ -73,7 +73,7 @@ public class Arthas {
VirtualMachineDescriptor virtualMachineDescriptor = null;
for (VirtualMachineDescriptor descriptor : VirtualMachine.list()) {
String pid = descriptor.id();
- if (pid.equals(Integer.toString(configure.getJavaPid()))) {
+ if (pid.equals(Long.toString(configure.getJavaPid()))) {
virtualMachineDescriptor = descriptor;
}
}
diff --git a/core/src/main/java/com/taobao/arthas/core/advisor/AdviceWeaver.java b/core/src/main/java/com/taobao/arthas/core/advisor/AdviceWeaver.java
index fc29f233a..5b1cfed8a 100644
--- a/core/src/main/java/com/taobao/arthas/core/advisor/AdviceWeaver.java
+++ b/core/src/main/java/com/taobao/arthas/core/advisor/AdviceWeaver.java
@@ -30,7 +30,13 @@ public class AdviceWeaver extends ClassVisitor implements Opcodes {
private final static Logger logger = LogUtil.getArthasLogger();
-
+ public static final String ON_BEFORE = "methodOnBegin";
+ public static final String ON_RETURN = "methodOnReturnEnd";
+ public static final String ON_THROWS = "methodOnThrowingEnd";
+ public static final String BEFORE_INVOKE = "methodOnInvokeBeforeTracing";
+ public static final String AFTER_INVOKE = "methodOnInvokeAfterTracing";
+ public static final String THROW_INVOKE = "methodOnInvokeThrowTracing";
+ public static final String RESET = "resetArthasClassLoader";
// 线程帧栈堆栈大小
private final static int FRAME_STACK_SIZE = 7;
diff --git a/core/src/main/java/com/taobao/arthas/core/config/Configure.java b/core/src/main/java/com/taobao/arthas/core/config/Configure.java
index e2c401dba..d2f91a9fe 100644
--- a/core/src/main/java/com/taobao/arthas/core/config/Configure.java
+++ b/core/src/main/java/com/taobao/arthas/core/config/Configure.java
@@ -20,7 +20,7 @@ public class Configure {
private String ip;
private int telnetPort;
private int httpPort;
- private int javaPid;
+ private long javaPid;
private String arthasCore;
private String arthasAgent;
@@ -61,11 +61,11 @@ public class Configure {
return httpPort;
}
- public int getJavaPid() {
+ public long getJavaPid() {
return javaPid;
}
- public void setJavaPid(int javaPid) {
+ public void setJavaPid(long javaPid) {
this.javaPid = javaPid;
}
diff --git a/core/src/main/java/com/taobao/arthas/core/env/PropertyPlaceholderHelper.java b/core/src/main/java/com/taobao/arthas/core/env/PropertyPlaceholderHelper.java
index b76eadc17..0269eb28a 100644
--- a/core/src/main/java/com/taobao/arthas/core/env/PropertyPlaceholderHelper.java
+++ b/core/src/main/java/com/taobao/arthas/core/env/PropertyPlaceholderHelper.java
@@ -228,7 +228,6 @@ public class PropertyPlaceholderHelper {
* Strategy interface used to resolve replacement values for placeholders
* contained in Strings.
*/
- @FunctionalInterface
public interface PlaceholderResolver {
/**
diff --git a/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java b/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java
index 405b23ac5..cfcc12833 100644
--- a/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java
+++ b/core/src/main/java/com/taobao/arthas/core/server/ArthasBootstrap.java
@@ -2,6 +2,8 @@ package com.taobao.arthas.core.server;
import com.taobao.arthas.core.config.Configure;
import com.alibaba.arthas.tunnel.client.TunnelClient;
+import com.taobao.arthas.common.PidUtils;
+import com.taobao.arthas.core.advisor.AdviceWeaver;
import com.taobao.arthas.core.command.BuiltinCommandPack;
import com.taobao.arthas.core.shell.ShellServer;
import com.taobao.arthas.core.shell.ShellServerOptions;
@@ -18,6 +20,7 @@ import com.taobao.middleware.logger.Logger;
import io.netty.channel.ChannelFuture;
+import java.arthas.Spy;
import java.io.File;
import java.io.IOException;
import java.lang.instrument.Instrumentation;
@@ -43,7 +46,6 @@ public class ArthasBootstrap {
private static ArthasBootstrap arthasBootstrap;
private AtomicBoolean isBindRef = new AtomicBoolean(false);
- private int pid;
private Instrumentation instrumentation;
private Thread shutdown;
private ShellServer shellServer;
@@ -52,8 +54,7 @@ public class ArthasBootstrap {
private File arthasOutputDir;
- private ArthasBootstrap(int pid, Instrumentation instrumentation) {
- this.pid = pid;
+ private ArthasBootstrap(Instrumentation instrumentation) {
this.instrumentation = instrumentation;
String outputPath = System.getProperty("arthas.output.dir", "arthas-output");
@@ -80,6 +81,24 @@ public class ArthasBootstrap {
Runtime.getRuntime().addShutdownHook(shutdown);
}
+ private static void initSpy() throws ClassNotFoundException, NoSuchMethodException {
+ Class> adviceWeaverClass = AdviceWeaver.class;
+ Method onBefore = adviceWeaverClass.getMethod(AdviceWeaver.ON_BEFORE, int.class, ClassLoader.class, String.class,
+ String.class, String.class, Object.class, Object[].class);
+ Method onReturn = adviceWeaverClass.getMethod(AdviceWeaver.ON_RETURN, Object.class);
+ Method onThrows = adviceWeaverClass.getMethod(AdviceWeaver.ON_THROWS, Throwable.class);
+ Method beforeInvoke = adviceWeaverClass.getMethod(AdviceWeaver.BEFORE_INVOKE, int.class, String.class, String.class, String.class, int.class);
+ Method afterInvoke = adviceWeaverClass.getMethod(AdviceWeaver.AFTER_INVOKE, int.class, String.class, String.class, String.class, int.class);
+ Method throwInvoke = adviceWeaverClass.getMethod(AdviceWeaver.THROW_INVOKE, int.class, String.class, String.class, String.class, int.class);
+ Spy.init(AdviceWeaver.class.getClassLoader(), onBefore, onReturn, onThrows, beforeInvoke, afterInvoke, throwInvoke);
+ }
+
+ public void bind(String args) throws Throwable {
+ initSpy();
+ Configure configure = Configure.toConfigure(args);
+ bind(configure);
+ }
+
/**
* Bootstrap arthas server
*
@@ -120,7 +139,7 @@ public class ArthasBootstrap {
try {
ShellServerOptions options = new ShellServerOptions()
.setInstrumentation(instrumentation)
- .setPid(pid)
+ .setPid(PidUtils.currentLongPid())
.setSessionTimeout(configure.getSessionTimeout() * 1000);
if (agentId != null) {
@@ -208,9 +227,9 @@ public class ArthasBootstrap {
* @param instrumentation JVM增强
* @return ArthasServer单例
*/
- public synchronized static ArthasBootstrap getInstance(int javaPid, Instrumentation instrumentation) {
+ public synchronized static ArthasBootstrap getInstance(Instrumentation instrumentation) {
if (arthasBootstrap == null) {
- arthasBootstrap = new ArthasBootstrap(javaPid, instrumentation);
+ arthasBootstrap = new ArthasBootstrap(instrumentation);
}
return arthasBootstrap;
}
diff --git a/core/src/main/java/com/taobao/arthas/core/shell/ShellServerOptions.java b/core/src/main/java/com/taobao/arthas/core/shell/ShellServerOptions.java
index 5ebc5d2c7..1b425c120 100644
--- a/core/src/main/java/com/taobao/arthas/core/shell/ShellServerOptions.java
+++ b/core/src/main/java/com/taobao/arthas/core/shell/ShellServerOptions.java
@@ -34,7 +34,7 @@ public class ShellServerOptions {
private long sessionTimeout;
private long reaperInterval;
private long connectionTimeout;
- private int pid;
+ private long pid;
private Instrumentation instrumentation;
public ShellServerOptions() {
@@ -98,7 +98,7 @@ public class ShellServerOptions {
return this;
}
- public ShellServerOptions setPid(int pid) {
+ public ShellServerOptions setPid(long pid) {
this.pid = pid;
return this;
}
@@ -108,7 +108,7 @@ public class ShellServerOptions {
return this;
}
- public int getPid() {
+ public long getPid() {
return pid;
}
diff --git a/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellImpl.java b/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellImpl.java
index 883dd9584..01120c4ea 100644
--- a/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellImpl.java
+++ b/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellImpl.java
@@ -19,7 +19,6 @@ import com.taobao.arthas.core.shell.system.JobController;
import com.taobao.arthas.core.shell.system.impl.InternalCommandManager;
import com.taobao.arthas.core.shell.system.impl.JobControllerImpl;
import com.taobao.arthas.core.shell.term.Term;
-import com.taobao.arthas.core.util.Constants;
import com.taobao.arthas.core.util.LogUtil;
import com.taobao.middleware.logger.Logger;
@@ -49,7 +48,7 @@ public class ShellImpl implements Shell {
private String prompt;
public ShellImpl(ShellServer server, Term term, InternalCommandManager commandManager,
- Instrumentation instrumentation, int pid, JobControllerImpl jobController) {
+ Instrumentation instrumentation, long pid, JobControllerImpl jobController) {
session.put(Session.COMMAND_MANAGER, commandManager);
session.put(Session.INSTRUMENTATION, instrumentation);
session.put(Session.PID, pid);
diff --git a/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellServerImpl.java b/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellServerImpl.java
index e9730b42f..444e42e58 100644
--- a/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellServerImpl.java
+++ b/core/src/main/java/com/taobao/arthas/core/shell/impl/ShellServerImpl.java
@@ -50,7 +50,7 @@ public class ShellServerImpl extends ShellServer {
private String welcomeMessage;
private ArthasBootstrap bootstrap;
private Instrumentation instrumentation;
- private int pid;
+ private long pid;
private boolean closed = true;
private final Map sessions;
private final Future sessionsClosed = Future.future();
diff --git a/core/src/main/java/com/taobao/arthas/core/shell/session/Session.java b/core/src/main/java/com/taobao/arthas/core/shell/session/Session.java
index 375799f34..5242a684e 100644
--- a/core/src/main/java/com/taobao/arthas/core/shell/session/Session.java
+++ b/core/src/main/java/com/taobao/arthas/core/shell/session/Session.java
@@ -92,7 +92,7 @@ public interface Session {
*
* @return java pid
*/
- int getPid();
+ long getPid();
/**
* Get all registered command resolvers
diff --git a/core/src/main/java/com/taobao/arthas/core/shell/session/impl/SessionImpl.java b/core/src/main/java/com/taobao/arthas/core/shell/session/impl/SessionImpl.java
index 21756840a..a0a10497c 100644
--- a/core/src/main/java/com/taobao/arthas/core/shell/session/impl/SessionImpl.java
+++ b/core/src/main/java/com/taobao/arthas/core/shell/session/impl/SessionImpl.java
@@ -75,8 +75,8 @@ public class SessionImpl implements Session {
}
@Override
- public int getPid() {
- return (Integer) data.get(PID);
+ public long getPid() {
+ return (Long) data.get(PID);
}
@Override
diff --git a/core/src/main/java/com/taobao/arthas/core/util/ApplicationUtils.java b/core/src/main/java/com/taobao/arthas/core/util/ApplicationUtils.java
deleted file mode 100644
index 8f17aba41..000000000
--- a/core/src/main/java/com/taobao/arthas/core/util/ApplicationUtils.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.taobao.arthas.core.util;
-
-import java.lang.management.ManagementFactory;
-
-/**
- *
- * @author hengyunabc 2018-09-30
- *
- */
-public class ApplicationUtils {
-
- private static String PID = "-1";
-
- static {
- // https://stackoverflow.com/a/7690178
- String jvmName = ManagementFactory.getRuntimeMXBean().getName();
- int index = jvmName.indexOf('@');
-
- if (index > 0) {
- try {
- PID = Long.toString(Long.parseLong(jvmName.substring(0, index)));
- } catch (Throwable e) {
- // ignore
- }
- }
- }
-
- public static String getPid() {
- return PID;
- }
-
-}
diff --git a/core/src/main/java/com/taobao/arthas/core/util/Constants.java b/core/src/main/java/com/taobao/arthas/core/util/Constants.java
index c56265a97..bd80e310b 100644
--- a/core/src/main/java/com/taobao/arthas/core/util/Constants.java
+++ b/core/src/main/java/com/taobao/arthas/core/util/Constants.java
@@ -2,6 +2,7 @@ package com.taobao.arthas.core.util;
import java.io.File;
+import com.taobao.arthas.common.PidUtils;
import com.taobao.arthas.core.view.Ansi;
import static com.taobao.arthas.core.util.LogUtil.LOGS_DIR;
@@ -50,7 +51,7 @@ public class Constants {
/**
* 当前进程PID
*/
- public static final String PID = ApplicationUtils.getPid();
+ public static final String PID = PidUtils.currentPid();
/**
* 缓存目录
diff --git a/spy/src/main/java/java/arthas/Spy.java b/spy/src/main/java/java/arthas/Spy.java
index 2af7389d4..f4f7692d2 100644
--- a/spy/src/main/java/java/arthas/Spy.java
+++ b/spy/src/main/java/java/arthas/Spy.java
@@ -48,28 +48,6 @@ public class Spy {
THROW_INVOKING_METHOD = throwInvokingMethod;
}
- /**
- * 用于启动线程初始化
- */
- public static void initForAgentLauncher(
- ClassLoader classLoader,
- Method onBeforeMethod,
- Method onReturnMethod,
- Method onThrowsMethod,
- Method beforeInvokingMethod,
- Method afterInvokingMethod,
- Method throwInvokingMethod,
- Method agentResetMethod) {
- CLASSLOADER = classLoader;
- ON_BEFORE_METHOD = onBeforeMethod;
- ON_RETURN_METHOD = onReturnMethod;
- ON_THROWS_METHOD = onThrowsMethod;
- BEFORE_INVOKING_METHOD = beforeInvokingMethod;
- AFTER_INVOKING_METHOD = afterInvokingMethod;
- THROW_INVOKING_METHOD = throwInvokingMethod;
- AGENT_RESET_METHOD = agentResetMethod;
- }
-
/**
* Clean up the reference to com.taobao.arthas.agent.AgentLauncher$1
* to avoid classloader leak.