如何在Java应用程序服务器上或一般情况下强制或生成JVM核心转储?
答案 0 :(得分:20)
问题(摘要):要诊断与在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流程命令窗口可用时,生成转储很简单,如下所示:
视窗:
如果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>
其中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 AIX
:Linux和AIX的信号为SIGQUIT
。使用该命令发送用户信号以触发各种转储:
kill -3 <PID>
为此,必须设置JVM以在用户信号上生成转储。要在用户信号下生成Java核心转储,堆转储,系统核心转储和快照池,必须在启动时向JVM提供以下选项。
-Xdump:java+heap+system+snap:events=user
注意:必须使用jextract工具处理系统核心转储文件,并且必须将输出发送给IBM支持人员。应该使用来自遇到问题的同一JVM的jextract来处理系统核心转储:
<JAVA_HOME>/jre/bin/jextract <dumpfile>
其中dumpfile是系统核心转储的文件名。
这将生成一个zip文件.zip。需要将zip文件发送给IBM支持人员。
答案 1 :(得分:-2)
如果您正在运行自己的代码,Q&amp; D方法是引发异常并立即打印其堆栈跟踪。如果没有,分析工具应该有方法捕获JVM中运行的线程的快照。 我使用了YourKit并喜欢它,但有free alternatives。