目录
1-Java 进行故障排除前的一些准备
1.1 启用 JVM 故障排除的相关配置
1.1.1 HeapDumpOnOutOfMemoryError配置
将 -XX:+HeapDumpOnOutOfMemoryError 添加到 JVM 标志:如 -XX:+HeapDumpOnOutOfMemoryError
应用程序运行到内存溢出时候将抛出错误,OutOfMemoryError.
与核心文件一样,堆转储可能非常大,尤其是在使用大型 Java 堆运行时。
同样,想想如果应用程序运行到OutOfMemoryError. 您想在错误发生时检查堆吗?在这种情况下,默认打开 flag 以便在应用程序遇到意外时获取此数据OutOfMemoryError。
1.1.2 飞行记录配置
运行连续的 Java 飞行记录:设置 Java 以运行连续的飞行记录。
连续飞行记录是 JFR 事件的循环缓冲区。如果应用程序遇到问题,您可以转储运行最后一小时的数据。JFR 事件有助于调试从内存泄漏到网络错误、高 CPU 使用率、线程块等各种问题。
使用连续飞行记录运行的开销非常低。有关生成连续 Java 飞行记录的信息,请留意后续博客.
1.1.3 GC信息
将 -verbosegc 添加到 JVM 命令行:该标志-verbosegc记录有关 Java 垃圾收集器的基本信息。此日志可帮助您找到以下内容:
垃圾收集运行时间长吗?
空闲内存是否会随着时间的推移而减少?
当应用程序抛出OutOFMemoryError或应用程序遇到性能问题时,垃圾收集器日志有助于诊断问题;因此,默认情况下打开该-verbosegc标志有助于解决问题。
使用日志轮换,以便应用程序重新启动不会删除以前的日志。从 JDK7 开始,flagsUseGClogFileRotation和NumberOfGCLogFiles可用于设置日志轮换。有关这些标志的描述,请参阅Java HotSpot VM 的调试选项。
1.1.4 打印 Java 版本和 JVM 标志
在提交 Java 错误或从论坛寻求帮助之前,请在日志文件中准备好基本信息。例如,打印 Java 版本和使用的 JVM 标志会很有帮助。
如果您的应用程序以脚本启动,请运行java -version以打印 Java 版本并在执行之前打印命令行。另一种选择是向JVM 参数 添加-XX+PrintCommandLineFlags和-showversion
1.1.5 为远程监控设置 JMC JMX
JMX 可用于使用 Mission Control 或 Visual VM 等工具远程连接到 Java 应用程序。除非您可以在运行您的应用程序的同一台机器上运行这些工具,否则设置它可能有助于以后监控应用程序、发送诊断命令、管理飞行记录等。如果启用 JMX,则没有性能开销。
另一种选择是在 Java 应用程序启动后启用 JMX,即使用诊断命令ManagementAgent.start。运行jcmd help ManagementAgent.start可与命令一起发送的标志列表。
1.1.6 开启必要的日志
使 Java 应用程序更易于调试,使用日志框架是启用未来调试的好方法。
如果您在特定模块中遇到问题,您应该能够在该模块中启用日志记录。指定不同级别的日志记录也很好,例如信息、调试和跟踪。有关 Java 日志记录的更多信息,请参阅Java 日志
技术咨询与支持,可以扫描微信公众号进行回复咨询