使用脚本编制转储服务器进程中的线程

使用 AdminControl 对象来生成 Java 核心转储,这包括正在运行的服务器的 Java 线程。

准备工作

开始本任务前,wsadmin 工具必须正在运行。 有关更多信息,请参阅 使用 wsadmin 脚本编制启动 wsadmin 脚本编制客户机 一文。

有关此任务

[z/OS]dumpThreads 命令将生成 Java 堆转储、Java 虚拟机 (JVM) 发起的系统事务转储 (TDUMP) 和 Java 核心转储。

  • Java 堆转储包括 Java 堆上运行的 Java 应用程序使用的所有活动对象。
  • 系统 TDUMP 包括所有故障地址空间的内容。
    避免麻烦: 在某些情况下,可能会频繁触发挂起的线程检测进程,从而导致启动系统 TDUMP。 这些转储可能很大且需要几分钟来处理。 在处理转储时,服务器地址空间不可分派,这可能延长保持地址空间拥有的锁定的时长。 如果您的服务器使用诸如 DB2 或 WebSphere MQ 的共享子系统,在此期间可能保留锁定的延长时长会负面影响这些共享子系统,以及共享这些子系统的其他地址空间。 因此,如果频繁遇到线程挂起,那么您可能希望在遇到线程挂起的应用程序服务器上禁止获取系统 TDUMP。
  • Java 核心转储包括 JVM 使用的所有内存,且包括服务器进程中每个线程的状态。

[z/OS]如果要禁用堆转储的生成,请将 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')

    [z/OS]还可以在发生超时的情况下使用 Modify 命令来生成 Java 核心转储。

注: dumpThreads 命令根据 -Xdumps 设置创建其他类型的转储文件。 转储输出根据平台不同而有所变化,并且可能会包含系统核心文件、堆和快照转储。