JDK6u23升级后,Jstack和Jstat停止工作

18

我们最近从JDK6u20(Linux,32位和64位)升级到JDK6u23。从那时起,我们不能再使用工具jstackjstat从运行中的进程获取监视信息。如果我们切换回JDK6u20,一切正常。

我们正在运行Tomcat 6。根据这个论坛帖子,其他人也有同样的问题: http://forums.oracle.com/forums/thread.jspa?threadID=2151967&tstart=0

运行简单的普通Java进程并使用工具是有效的。

Jstack显示:无法打开套接字文件:目标进程未响应或HotSpot VM未加载。当目标进程未响应时,可以使用-F选项。

Jstat显示:19799未找到

使用Jps根本不显示运行中的进程,所以我猜问题更多地与JDK6u23以及JDK6u24的一般性质相关。它有一个新的Hotspot引擎。也许在与Tomcat和那个Hotspot v19结合使用时有些东西无法正常工作。

有什么想法吗?感谢帮助。

P.S.当然,我们以相同的用户运行它,并且没有更改任何其他内容。只有JDK。


奇怪,我从来没有遇到过 jstack 的问题,你尝试过只使用 jstack <pid>(不带选项)吗? - bestsss
是的,我们尝试了只有那个,但它没有起作用。但请看下面,找到了解决方法。这是JDK中改变了什么,在安装了Tomcat之后就成了问题。 - ReneS
2个回答

12

在Oracle论坛中找到了可能的答案:

尽管6u23/24确实引入了此问题,但这不是jps的bug。而是VM本身行为的变化。在GNU/Linux上,Jps等似乎只查看/tmp,但不一定查看您的CATALINA_TMPDIR。无论是否设置,尝试导出CATALINA_TMPDIR=/tmp,该参数将被翻译为“-Djava.io.tmpdir=/tmp”,并重新启动Tomcat进程后,您应该可以看到Tomcat数据在"/tmp/hsperfdata_/",Jps也很可能再次正常工作。


这是答案。它有效。我刚试过了。但是如果你一直依赖于CATALINA_TMPDIR,那么很难使其正常工作,因为在许多服务同时运行时,可能会在/tmp目录中出现冲突。 - ReneS
3
我通过将catalina的临时目录位置传递给JPS来解决了这个问题,命令如下:jps -J-Djava.io.tmpdir=/opt/tomcat/instances/solr/temp。 - mogsie

4

谢谢提供链接。我们在修复设置时会考虑到这个。 - ReneS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接