相关疑难解决方法(0)

jstack:目标进程没有响应

我正在运行Ubuntu服务器版,我想采取Tomcat的线程转储.

所以,我首先尝试找出哪个PID tomcat使用:

$ jps -l
5809 sun.tools.jps.Jps
Run Code Online (Sandbox Code Playgroud)

但它不在那里?

所以,我用了之后top发现了PID 5730.

然后我调用jstack来获取线程转储:

$ sudo jstack -l 5730
5730: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?:-(

我已经尝试按照Jstack中的描述导出CATALINA_TMPDIR,并且Jstat停止使用升级到JDK6u23但是没有改变任何东西:

$ export CATALINA_TMPDIR=/tmp
$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6
   ...done.
 * Starting Tomcat servlet engine tomcat6
   ...done.
$ sudo jstack -l 5934 // …
Run Code Online (Sandbox Code Playgroud)

java jstack thread-dump

46
推荐指数
2
解决办法
8万
查看次数

即使java进程正在运行,jps也不返回任何输出

我正在尝试在Solaris机器上调试java进程的一些问题,但是运行jps不会返回任何输出.并且jstack给出错误'Permission denied'.该框是3个相同服务器集群的一部分,jps和jstack在其他2台服务器上运行良好.

我发现以下论坛帖子来自有同样问题但没有答案的人:http: //forums.sun.com/thread.jspa?threadID = 5422237

澄清运行bps和grep for java给出了所有java程序正确,但是jps没有给出任何东西(用'program'和'client'匿名来保护有罪):

program @ clientdelivery2 : ~/
-> bps auxww|grep java
program     3427  5.5 54.067742726649544 ?        S   Sep 25 1039:47 /usr/jdk/instances/jdk1.6.0_16/bin/amd64/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/app/client/program/tomcat/conf/logging.properties -Xmx6144m -XX:PermSize=128m -XX:MaxPermSize=512m -Djava.endorsed.dirs=/app/client/program/tomcat/endorsed -classpath :/app/client/program/tomcat/bin/bootstrap.jar -Dcatalina.base=/app/client/program/tomcat -Dcatalina.home=/app/client/program/tomcat -Djava.io.tmpdir=/app/client/program/tomcat/temp org.apache.catalina.startup.Bootstrap start
program    29915  0.1 11.915252441467896 ?        S 14:55:28  3:59 /usr/jdk/instances/jdk1.6.0_16/bin/amd64/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/app/clientclone/program/tomcat/conf/logging.properties -Xmx2g -XX:PermSize=128m -XX:MaxPermSize=512m -Dcom.sun.management.jmxremote -Djava.endorsed.dirs=/app/clientclone/program/tomcat/endorsed -classpath :/app/clientclone/program/tomcat/bin/bootstrap.jar -Dcatalina.base=/app/clientclone/program/tomcat -Dcatalina.home=/app/clientclone/program/tomcat -Djava.io.tmpdir=/app/clientclone/program/tomcat/temp org.apache.catalina.startup.Bootstrap start
program     1573  0.0  0.0 4760 1332 pts/5    S 17:05:24  0:00 grep --colour java

program …
Run Code Online (Sandbox Code Playgroud)

java debugging solaris

18
推荐指数
4
解决办法
2万
查看次数

AttachNotSupportedException由于Attach API中缺少java_pid文件

构建我自己的探查器,我使用JVMTI API来构建本机库代理.可以使用add参数-agentlib与JVM一起启动此代理程序.此外还有Attach API,它允许将代理注入正在运行的JVM中.我想使用以下代码将此功能实现到我的探查器:

try {
    String pid = VirtualMachine.list().get(0).id();
    VirtualMachine vm = VirtualMachine.attach(pid);
    vm.loadAgentLibrary("agent");
} catch (AgentLoadException e1) {
    e1.printStackTrace();
} catch (AgentInitializationException e1) {
    e1.printStackTrace();
} catch (IOException e1) {
    e1.printStackTrace();
} catch (AttachNotSupportedException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

它有什么作用?从所有可用的正在运行的虚拟机(VirtualMachine.list())中,我选择第一个,附加到它并尝试将我的代理加载到其中.可以在UNIX系统上找到名为libagent.so的代理,但在尝试加载代理时会引发以下异常:

com.sun.tools.attach.AttachNotSupportedException:
   Unable to open socket file:
      target process not responding or HotSpot VM not loaded.
Run Code Online (Sandbox Code Playgroud)

查看源代码,抛出此异常,因为它找不到名为的文件.java_pid<pid>.我没有在文档中找到有关此类文件的大量信息.我经常听说这种文件不再使用,但我正在运行Java 1.6.

我还尝试连接到其他JVM,事实上我保持这个附加过程是动态的,出于测试原因我只是尝试连接到任何JVM.


这是导致异常的代码,取自sun.tools.attach:LinuxVirtualMachine.java:

    // Return the socket file for the given process.
    // Checks working directory …
Run Code Online (Sandbox Code Playgroud)

java jvmti

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×3

debugging ×1

jstack ×1

jvmti ×1

solaris ×1

thread-dump ×1