强制或生成jvm核心转储(IBM JVM)

可能重复:
我可以强制生成JVM崩溃日志文件吗?

如何在Java应用程序服务器上或一般情况下强制或生成JVM核心转储?

问题(摘要):要诊断与在WebSphere Application Server Community Edition上运行的客户应用程序的挂起或性能不佳相关的问题,将要求用户生成各种转储并将其发送给IBM支持人员进行诊断。

此技术说明解释了当WebSphere Application Server Community Edition作为操作系统服务运行时如何生成所需的转储。 此技术说明适用于IBM Java SDK 1.5.0和IBM Java SDK 1.6.0

原因 :当客户应用程序在IBM Java SDK 1.5.0或IBM Java SDK 1.6.0上使用WebSphere Application Server Community Edition时出现挂起或性能不佳,并且服务器作为操作系统服务运行时,相应的命令/ shell窗口用户无法使用服务器进程。 因此,无法从键盘发送用户信号以触发转储。

解决问题:当JVM进程命令窗口可用时,生成转储很简单,如下所示:

Windows:如果JVM设置配置为在用户信号处触发转储,请在命令窗口中按CRTL+Break以生成转储。

Linux:如果JVM设置配置为在用户信号处生成转储,请在shell窗口中按CTRL+\

AIX:如果JVM设置配置为在用户信号处生成转储,请在shell窗口中按CTRL+\

注意:为了在用户信号处生成java核心转储,系统核心转储,堆转储和快照转储,必须通过JVM选项配置转储代理,如下所示:

 -Xdump:java+heap+system+snap:events=user 

有关如何配置转储代理的更多信息,请访问-Xdump

但是,如果WebSphere Application Server Community Edition作为操作系统服务运行,则命令窗口可能不可用。 在Windows上使用javaw.exe启动JVM进程时,也会出现这种情况。

在前面的情况下,用户需要找到JVM进程的相应进程ID,并使用操作系统供应商提供的工具或IBM提供的工具按照以下步骤生成转储。

Windows:可以从Microsoft Dev工具站点下载WinDbg以生成系统核心转储。 在WinDbg控制台上使用以下命令生成系统核心转储:

 dump /f  

其中dumpfile包含目录路径和系统核心转储文件的名称。 确保使用/f选项代替/ma/f生成完全转储,其中/ma生成小型转储。 IBM Java SDK 1.5.0 / 1.6.0提供的jextract工具仅支持完全转储。

适用于Windows的SendSignal实用程序。 为此,必须设置JVM以生成用户信号的转储。 要在用户信号处生成Java核心转储,堆转储,系统核心转储和快照转储,必须在启动时向JVM提供以下选项:

 -Xdump:java+heap+system+snap:events=user 

注意:SendSignal实用程序可用于生成所有类型的转储,其中WinDbg仅生成系统核心转储。

Linux and AIXLinux and AIX的信号是SIGQUIT 。 使用该命令发送用户信号以触发各种转储:

 kill -3  

为此,必须设置JVM以在用户信号上生成转储。 要在用户信号处生成Java核心转储,堆转储,系统核心转储和快照池,必须在启动时向JVM提供以下选项。

 -Xdump:java+heap+system+snap:events=user 

注意:必须使用jextract工具处理系统核心转储文件,并且必须将输出发送给IBM支持人员。 应该使用来自遇到问题的同一JVM的jextract来处理系统核心转储:

 /jre/bin/jextract  

其中dumpfile是系统核心转储的文件名。

这将生成一个zip文件.zip。 需要将zip文件发送给IBM支持人员。

如果您正在运行自己的代码,Q&D方法是引发exception并立即打印其堆栈跟踪。 如果没有,分析工具应该有方法捕获JVM中运行的线程的快照。 我使用过YourKit并喜欢它,但有免费的替代品 。