美文网首页
常见的Java故障排除-故障排除准备

常见的Java故障排除-故障排除准备

作者: 风吹柳_柳随风 | 来源:发表于2019-06-26 09:32 被阅读0次

Java8官方文档

设置Java来进行故障排除

        1.更新Java版本:第一步,使用最新的Java版本,避免花时间在已经解决的Bug上面。往往,Java最新版本会修复运行时出现的Bug。使用最新版本的Java可以避免遇到那些已经发现的问题。
        2.设置需要调试的Java环境:不管是单机部署还是分布式应用,都要确保你的应用能够方便的更换Java版本和更改Java的命令行选项。

为JVM故障排除启用选项/标志

1. Enable core files
        如果Java崩溃,举个例子由于分段故障,操作系统会将core file( complete dump of the memory)保存到磁盘中。在Linux和 Solaris操作系统上,有时候默认是不会生成core file。为了能够在Linux和Solaris上获得core file,在启动应用之前,先在命令行中运行ulimit -c unlimited命令。
        注意:core files占用很大一部分磁盘空间,尤其是当运行了一个大型的Java堆时。
        考虑当程序崩溃时,你需要做什么来决定是否开启core files。你是否真的需要查看core filecore file对于许多Java用户是无用的。如果你想要使用本地的调试器例如gdb或者使用 Serviceability Agent来探察可能引起程序崩溃的原因,那么确保在程序启动之前开启core file。获取更多Serviceability Agent工具HSDBCLHSDB的详细信息,请阅读 Java Magazine
        很多时候,程序崩溃是重现不了的;因此在启动程序之前,尽可能的启用core files

2. Add -XX:+HeapDumpOnOutOfMemoryError to the JVM flags
        如果你使用了-XX:+HeapDumpOnOutOfMemoryError参数,那么如果你的应用运行时出现OutOfMemoryError,程序会将Java堆转储文件存放到磁盘中。使用The jhat Utility工具检查Java堆并找出哪些对象占用最多的内存。然后检查这些对象是否是已经不再使用的,但是依然存活了下来。
        和core files一样,堆转储文件也是非常大的,尤其是运行了一个很大的Java堆时。

3. Run a continuous Java flight recording
        这是一项商业功能

4. Add -verbosegc to the JVM command-line
        -verbosegc会记录有关Java垃圾收集器的基本信息。查看该日志会获取以下几点信息:

  • 垃圾收集器是否运行了很大一段时间?
  • 可用内存是否随着时间的推移而减少?
            当应用程序抛出一个OutOFMemoryError或者遇到性能问题,垃圾收集日志对诊断这类问题就会有帮助。因此默认开启-verbosegc开关可以帮助解决问题。
            注意:为了防止应用程序重启后删除以前的日志,请使用日志轮换。在JDK7以后,设置日志轮换可以使用UseGClogFileRotationNumberOfGCLogFiles这两个开关。这些开关的描述可参考Debugging Options for Java HotSpot VM

5. Print Java version and JVM flags
        在提交Bug给Java或向论坛寻求帮助之前,请先从日志文件中确认基础的信息。例如,将Java的版本和用到的JVM参数打印出来是非常有帮助的。
        如果你的应用程序是通过脚本启动的,简单的办法就是执行java -version命令来打印出Java版本并且在执行脚本之前打印出执行命令。另外一种选择是向JVM添加-XX+PrintCommandLineFlags-showversion参数。

6. Set up JMC JMX for remote monitoring
        JMX可用于使用Mission Control或Visual VM等工具远程连接Java应用程序。启用JMX没有性能开销。
        关于JMX技术查看这篇文章How to monitor JVM using JMX Technology
        另一种在Java应用程序已经启动后启用JMX的方式是使用ManagementAgent.start诊断命令。运行jcmd <pid> help ManagementAgent.start命令可以获取开关列表,这些开关可以和命令一起发送。
        更多关于jcmd的命令可以查看The jcmd Utility

收集相关数据

        如果你的应用程序遇到问题了并且你想进一步调试问题,那么请确保在重启系统之前你已经收集了任何相关数据,尤其是那些重启会删除原先文件的系统。
        以下是一些从中收集数据的重要文件:

  • Core files for crash issues
  • hs_err printed text file for Java crashes
  • Log files: Java and application logs.
  • Java heap dumps for -XX:+HeapDumpOnOutOfMemoryError.
  • Java flight recordings (if enabled) - If the problem didn't terminate the application, dump the continuous recordings.
            如果应用程序已经停止响应,那么收集以下文件信息:
  • Stack traces: Take several stack traces using jcmd <pid> Thread.print before restarting the system
  • Dump flight recordings (if enabled).
  • Force a core file: If the application can't be closed properly, then stop the application and force a core file using kill -6 <pid> on Linux or Solaris systems

相关文章

  • 常见的Java故障排除-故障排除准备

    Java8官方文档 设置Java来进行故障排除 1.更新Java版本:第一步,使用最新的Java版本,避免花时间在...

  • 常见的Java故障排除-jcmd

    jcmd实用工具用于向JVM发送诊断命令请求,这些请求主要用于控制 Java Flight Recordings,...

  • Batocera 常见故障排除

    开机问题: 您可能需要更改BIOS以允许旧式和不安全的启动 拔下所有连接的存储设备或控制器 为了获得有关启动顺序的...

  • 第六十三章 使用 SNMP 监控 IRIS - SNMP 故障排

    第六十三章 使用 SNMP 监控 IRIS - SNMP 故障排除 SNMP 故障排除 IRIS 子代理(运行 ^...

  • 汽车方向机常见故障和排除方法

    我们的汽修技师整理了一些汽车方向机常见故障和排除方法,大家可以根据汽车方向机坏了的症状,具体分析排除方向机的故障。...

  • 电脑故障排除

    1.用CMD命令删除或是强行删除文件2.Win8.1用户头像设置后删除的方法3.清除Win8.1用户头像使用过的缩...

  • Troubleshooting (故障排除)

    Using the CocoaPods Project If something doesn’t seem to ...

  • linux: 故障排除

    Linux在启动过程中会出现一些故障,导致系统无法正常启动,本文列举了几个应用单用户模式、GRUB命令操作、Lin...

  • PromiseKit 故障排除

    全部文章简介基础部分快速上手Promise 的常见模式常见问题进阶部分故障排除附录API 说明 以下是对 Prom...

  • CAA:故障排除

    http://maruf.ca/rade/web/CAA_RADE_Troubleshooting.htm[htt...

网友评论

      本文标题:常见的Java故障排除-故障排除准备

      本文链接:https://www.haomeiwen.com/subject/ukmtcctx.html