使用脚本转储服务器进程中的线程
使用 AdminControl 对象生成一个 Java 核心转储,此转储包含正在运行的服务器的 Java 线程。
开始之前
开始本任务前,wsadmin 工具必须正在运行。请参阅使用 wsadmin 脚本编制启动 wsadmin 脚本编制客户机一文,以了解更多信息。
关于此任务
dumpThreads 命令将生成 Java 堆转储、Java 虚拟机 (JVM) 发起的系统事务转储 (TDUMP) 和 Java 核心转储。
- Java 堆转储包含运行的 Java 应用程序正在使用的 Java 堆上的所有活动对象。
- 系统 TDUMP 包含所有失败地址空间的内容。
避免故障: 在某些情况下,挂起的线程检测进程可能被频繁出发,从而导致启动系统 TDUMP。这些转储可能很大,并且可能需要几分钟时间来进行处理。处理转储时,服务器地址空间无法分配,这可能会延长所占用的地址空间所拥有的锁时间长度。如果您的服务器使用共享子系统(如 DB2 或 WebSphere MQ),那么可能占用锁的延长时间长度会负面影响这些共享子系统,以及共享这些子系统的其他地址空间。 因此,如果您遇到了频繁挂起的线程,那么您可能希望在遇到了挂起线程的应用程序服务器上禁用系统获取 TDUMP。gotcha
- Java 核心转储包含 JVM 正在使用的所有内存,并且包含服务器进程中每个线程的状态。
如果想禁用生成堆转储,请将 wsadmin_dumpthreads_enable_heapdump 环境变量设置为 0。如果想禁用生成系统 TDUMP,请将 wsadmin_dumpthreads_enable_javatdump 环境变量设置为 0。可以在节点级别或单元级别设置这些变量。
过程
发出下列其中一个命令以生成 Java 核心转储。
- 使用 Jacl:
set jvm [$AdminControl completeObjectName type=JVM,process=server1,*] $AdminControl invoke $jvm dumpThreads
- 使用 Jython:
jvm = AdminControl.completeObjectName('type=JVM,process=server1,*') AdminControl.invoke(jvm, 'dumpThreads')
只要发生超时,就可以使用 Modify 命令来生成 Java 核心转储。
有关处理转储线程的环境变量的信息,请参阅 Java 诊断指南。
注: dumpThreads 命令将根据 -Xdumps 设置创建其他类型的转储文件。转储输出根据平台不同而有所变化,并且可能会包含系统核心文件、堆和快照转储。