Linux 的 MustGather 信息

发生问题时,了解系统环境状态的信息越多,就越容易做出诊断。

IBM® Support Assistant Data Collector 是建议的实用程序,用于收集问题事件的 Java™ 诊断文件。 IBM Support Assistant Data Collector 收集诊断文件 (例如,转储和日志文件) ,并帮助您根据需要将信息发送到 IBM。 有关更多信息,请参阅 使用诊断工具

以下部分告诉您可以收集的数据,以帮助 IBM Java 服务团队解决问题。

生成系统转储

您可以使用 -Xdump:system 命令行选项以获取基于触发器的系统转储。 请参阅 使用转储代理程序 以获取更多信息。

您还可以使用 Linux® 系统实用程序来生成系统转储:
  1. 使用 ps 命令来确定应用程序的进程标识。 请参阅 ps 命令
  2. 在 shell 提示符中,输入 gcore -o <dump file name> <pid>

将为应用程序生成系统转储文件。 写入系统转储时,应用程序将暂挂。

收集系统转储(核心文件)

收集系统转储以帮助诊断多种类型的问题。 使用 jextract 实用程序来处理系统转储,以生成服务文件 (请参阅 转储抽取器 (jextract))。
注: 作为收集过程的一部分, IBM Support Assistant Data Collector 在系统转储上运行 jextract 实用程序。

生成 Javadump

在某些情况(如崩溃)下,通常会在当前目录中生成 Javadump。

在其他情况(如挂起)下,您可能需要提示 JVM 通过向 JVM 发送 SIGQUIT 符号来生成 Javadump:
  1. 使用 ps 命令来确定应用程序的进程标识。 请参阅 ps 命令
  2. 在 shell 提示符中,输入 kill -QUIT <pid>

有关此过程的更多信息,请参阅 J9 VM 参考中的 使用 Javadumps

生成 Heapdump

JVM 可在用户请求时(例如,从应用程序内调用 com.ibm.jvm.Dump.HeapDump(),或(缺省情况下)在 JVM 因 OutOfMemoryError 而终止时)生成 Heapdump。 您可以使用 -Xdump:heap 选项来为 Heapdump 计时指定更精细的控制。 例如,在执行一定次数的完整垃圾回收后,您可以请求 Heapdump。 缺省 Heapdump 格式(phd 文件)不可读,您可以使用可用工具(例如,Heaproots)来进行处理。 有关更多信息,请参阅 J9 VM 参考中的 使用 Heapdumps

生成快照跟踪

在缺省情况下,运行的 JVM 仅收集专用环绕式缓冲区中的少量跟踪数据。 当 JVM 意外终止或发生 OutOfMemoryError 时,该数据会转储至文件中。 您可以使用 -Xdump:snap 选项来更改导致生成快照跟踪的事件。 此快照跟踪采用常规跟踪文件格式,并且您需要使用提供的标准跟踪格式化程序,才能读取此快照跟踪。 请参阅 快照跟踪 ,以获取有关快照跟踪的内容和控制的更多信息。

生成 JIT 转储

一般保护错误 (GPF) 或异常中止事件会生成 JIT 诊断数据的小型二进制转储。 有关更多信息,请参阅 JIT 转储

使用系统日志

内核会记录系统消息和警告。 系统日志位于 /var/log/messages 文件中。 使用它可查看导致发生特定问题或事件的操作。 系统日志还可以帮助您确定系统状态。 其他系统日志位于 /var/log 目录中。

确定操作环境

本节介绍了在进程生命周期的各阶段确定其操作环境时可能有用的命令。

uname -a
显示操作系统和硬件信息。
df
显示系统上的可用磁盘空间。
可用
显示内存使用信息。
ps -ef
显示完整的进程列表。
lsof
显示打开的文件句柄。
显示缺省情况下按处理器使用率排序的进程信息(如处理器、内存和状态)。
vmstat
显示常规内存和页面调度信息。

unamedffree 输出最有用。 其他命令可在崩溃发生前后或在挂起过程中运行,以确定进程的状态。 这些命令可提供有用的诊断信息。

将信息发送至 Java 支持人员

当您收集完上一部分中列出的命令的输出后,请将该输出放入文件中。

请先压缩文件,然后再将其发送给 Java 支持人员,因为这些文件可能很大。 应以非常高的比率来压缩这些文件。

以下命令从文件 {文件 1,..,文件 N} 构建归档,并将其压缩为具有 filename.tgz 格式名称的文件:

tar czf filename.tgz file1 file2...filen

收集其他诊断数据

根据问题类型的不同,以下数据也可能有助于您诊断问题。 可用的信息取决于 Java 的启动方式以及系统环境。 如果这些调试辅助工具未处于活动状态,那么必须更改配置并重新启动 Java 以重现问题。

/proc 文件系统

/proc 文件系统提供对内核级别信息的直接访问。 /proc/<pid> 目录包含有关 PID(进程标识)为 <pid> 的进程的详细诊断信息,其中,<pid> 是进程的标识。

命令 cat /proc/<pid>/maps 列出给定进程的内存分段(包括本机堆)。

strace 和 ltrace

使用 straceltrace 命令可收集更多的诊断数据。 请参阅 跟踪工具