Java Jstack和Jstat停止了对JDK6u23的升级

Java Jstack和Jstat停止了对JDK6u23的升级,java,debugging,tomcat,jstack,jstat,Java,Debugging,Tomcat,Jstack,Jstat,我们最近从JDK6u20(Linux、32位和64位)升级到JDK6u23。从那时起,我们不能再使用工具jstack和jstat从正在运行的流程中获取监控信息。如果我们切换回JDK6u20,一切正常 我们正在运行Tomcat 6。根据本论坛帖子,其他人也有同样的问题: 运行简单的普通Java进程并使用这些工具是有效的 Jstack说:无法打开套接字文件:目标进程未响应或热点VM未加载当目标进程未响应时,可以使用-F选项 Jstat说:19799没有找到 使用Jps根本不会显示正在运行的进程,因

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

我们正在运行Tomcat 6。根据本论坛帖子,其他人也有同样的问题:

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

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

Jstat说:19799没有找到

使用Jps根本不会显示正在运行的进程,因此我想JDK6u23和JDK6u24的问题更一般。它有一个新的热点引擎。也许有些东西与Tomcat和热点v19不兼容

有什么想法吗?谢谢你的帮助


当然,我们是以同一用户的身份运行的,我们没有更改任何其他内容。只有JDK。

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

虽然6u23/24确实引入了这个问题,但它在jps中并不是一个bug。而是虚拟机本身行为的改变。在GNU/Linux上,JP和类似的东西似乎只关注/tmp,而不一定关注您的CATALINA_TMPDIR。如果设置或未设置,请尝试导出CATALINA_TMPDIR=/tmp,它将转换为“-Djava.io.TMPDIR=/tmp”,重新启动Tomcat进程后,您应该会看到Tomcat的数据为“/tmp/hsperfdata_/”,而Jps很可能也会再次工作


有关如何告诉jps或jstat连接到Tomcat的temp dir的说明,请参见

奇怪的,从来没有出现过带jstack的问题,您是否尝试过只使用jstack(无选项)?是的,我们只尝试了,但没有成功。但请看下面,找到了它。这是JDK中的一些变化,当Tomcat就位时,它就成了一个问题。这就是答案。它起作用了。我试过了。但是到目前为止,如果您依赖CATALINA_TMPDIR,则很难使其正常工作,因为在运行大量服务的情况下,/tmp中可能会出现冲突。我通过将CATALINA的临时目录的位置传递给JPS解决了这一问题,以此类推:JPS-J-Djava.io.TMPDIR=/opt/tomcat/instances/solr/hanks作为链接。我们将在修复设置时考虑到这一点。