如何在linux环境中调试jmv堆栈,并使用java应用程序调试tomcat,使其崩溃?

如何在linux环境中调试jmv堆栈,并使用java应用程序调试tomcat,使其崩溃?,java,tomcat,jvm,jvm-crash,Java,Tomcat,Jvm,Jvm Crash,我有一个问题,我的工作就靠这个了 在Linux下有一些带有tomcat的java应用程序会突然崩溃(这些应用程序不是我的,不能修改)。 每天早上我们都会发现一些应用程序坏了。 我想在java堆栈崩溃应用程序时看到JVM的消息(outofmemory、nullpointer等)。如果我能找到解决问题的建议 我不知道该怎么做 我看到在internet visualvm和jconsole中搜索这个。我想做的事够了吗?。 我想在JVM崩溃时看到java堆栈的消息 我需要帮助。非常感谢。看起来您有内存泄漏

我有一个问题,我的工作就靠这个了

在Linux下有一些带有tomcat的java应用程序会突然崩溃(这些应用程序不是我的,不能修改)。 每天早上我们都会发现一些应用程序坏了。 我想在java堆栈崩溃应用程序时看到JVM的消息(outofmemory、nullpointer等)。如果我能找到解决问题的建议

我不知道该怎么做

我看到在internet visualvm和jconsole中搜索这个。我想做的事够了吗?。 我想在JVM崩溃时看到java堆栈的消息


我需要帮助。非常感谢。

看起来您有内存泄漏问题,应用程序在重新启动一段特定时间后是否正常工作? 您可能想看看java堆中发生了什么,因此可以使用堆转储。。使用jcmd实用程序进行此操作,您可以在服务器上安装的JDK中找到此实用程序

jcmd <process id/main class> GC.heap_dump filename=filename
jcmd GC.heap\u dump filename=filename
注意:这将在每次运行时执行GC

要计划此操作,您需要设置cronjob

或者,如果在运行应用程序时指定
-XX:+HeapDumpOnOutOfMemoryError
命令行选项,则当抛出OutOfMemoryError异常时,JVM将生成堆转储(在日志中)


希望这有帮助。:)

您还可以附加一个工具包的演示版本,看看它能找到什么。另外,启用任何可用的转储,例如在oome上创建一个heapdump(googlethat)。您的Tomcat日志也应该包含有价值的信息。而且不可能看到我想要使用的带有jconsole和visualvm的jvm堆栈?确切地说,我想知道:我是否可以设置visualvm,以便它在检测到jvm崩溃时进行转储并向我显示jvm的错误(如果它是outmemoryerror或来自jvm的其他消息)???如果可能的话,我怎么做?谢谢。而且。。。如何放置命令XX:+HeapDumpOnOutOfMemoryError?。Isbit是Jvm的指令吗?。我在哪个文件中添加了这个?。当错误发生时,转储文件(路径)在哪里?。我读到的垃圾堆,我可以用visualvm阅读。