Sin*_*son 18 java debugging solaris
我正在尝试在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 @ clientdelivery2 : ~/
-> jps
program @ clientdelivery2 : ~/
->
Run Code Online (Sandbox Code Playgroud)
我在这里问了一下http://forums.oracle.com/forums/message.jspa?messageID=5408592我的问题是:
12460/2: mkdir("/tmp/hsperfdata_program", 0755) Err#13 EACCES [ALL]
Run Code Online (Sandbox Code Playgroud)
意味着jps被拒绝访问psperfdata目录.
有没有人遇到这个问题,知道如何解决它?
确保您尝试使用jps(和jstack,偶然)"检测"的程序在未设置设置的情况下运行java.io.tmpdir
,或将其设置为系统默认值.
Sun Developer Network上有许多错误临时目录位置不应该是硬编码的,修复6938627会在-Djava.io.tmpdir和Make临时目录使用属性java.io.tmpdir这些相关的内容时中断visualvm监视.
故事:java Java 6 Update 22曾经使用硬编码的临时目录来存储为jps和jstack使用而收集的数据.jps和jstack程序知道在哪里看.
但是,因为有人在Java 6 Update 23中引发了一个"bug",所以他们"修复"它以使用java.io.tmpdir java运行时设置.现在,这默认为系统特定的位置,这就是"硬编码"的位置.但是如果在调用java程序时设置了该选项,那么它将使用它.结果:jps和jstack看起来就像它们所期望的那样,并且没有找到任何东西.
因此,解决方案是确保将java.io.tmpdir选项设置为系统默认值(例如,在Mac上:
> java -Djava.io.tmpdir=$TMPDIR javamain
Run Code Online (Sandbox Code Playgroud)
)
在调用你的程序时.然后jps和jstack会找到它.
我的同事Glyn Normington在他的博客上描述了这一点.Java 6 Update 25中显然有一个修复.
另外,请确保您的启动脚本不包含此-XX:+PerfDisableSharedMem
选项,因为使用此选项,JVM 将不会写入任何统计信息,从而使该进程对jps
和不可见jstat
。