zoukankan      html  css  js  c++  java
  • java通用调试指导-Java通用故障处理(一)

    来源:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/toc.html

    一、通用故障处理
    1. java故障处理准备

    1.1 使用最新版本的java

    1.2 启用JVM故障处理的选项/标识(Options/flags)
       (1)启动core file
               启用core file情况下,如果java崩溃,OS会把core文件保存到磁盘。注:core file可能会占用大量磁盘空间,特别是
              启动core file,请在启动应用程序前,在命令行执行limit c unlimited。

     (2)JVM flags加入-XX:+HeapDumpOnOutOfMemoryError标记。
              加入本标记后,当程序遇到OutOfMemoryError错误时,会将java堆保存到本地磁盘。可使用The jhat Utility工具检查java堆,找到占用空间大、且不再使用但依然alive的对象。
              注:heap dumps也可能占用大量磁盘空间呢。

      (3)运行连续的JFR(The Java Flight Recorder)
              JFR是个商用特性,在开发者桌面、PC上可以免费使用。但是在生产服务器上需要购买Lincese。
              运行连续的JFR后,JFR事件缓存区会循环保存NFR记录。如果应用程序出现问题,就可以从NFR事件缓存区获取、转存最后一个小时的数据。HFR对调试内存泄露、网络错误、高CPU使用率、线程阻塞等问题十分有帮助。

              运行JFR后,JFR本身运行开销十分小。

     (4)JVM命令行加入-verbosegc,通过日志记录java垃圾收集器(Java Garbage Collector)的基本信息,通过这些信息日志,可以发现:
              a.垃圾收集是否长时间运行?
              b.空闲内存是否会随着时间减少?

             此功能,有助于应用程序发生aOutOFMemoryError错误,或应用程序遇到性能瓶颈时诊断问题。因此,此选项默认打开十分有助于故障处理。

             注:使用日志轮换(Use log rotation),这样应用程序重新启动不会删除以前的日志。JDK7开始,可以使用flagsUseGClogFileRotation和NumberOfGCLogFilescan来设置日志轮转。

      (5)打印java版本和JVM flags
             命令行通过java -version打印java版本。
             另一种方式是在JVM参数中添加-XX+PrintCommandLineFlags和-showversion

      (6)设置JMC JMX进行远程监控
             JMX可用来通过Mission Control或VisualVM等工具远程连接到Java应用程序。除非你可以在运行应用程序的同一机器上运行如上工具,否则使用这些工具在以后监视应用程序、发送诊断命令、管理JFR等方面会很有帮助。
             运行JMX没有性能开销。
             JMX详情参考:https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

    1.3 收集相关数据
        如果应用程序运行遇到问题,并且希望进一步调试问题,请确保在重新启动系统之前收集任何相关数据,特别是如果重新启动会删除以前的文件。
        需要收集的重要文件如下:
            a.崩溃问题的Core files。
            b.java崩溃打印的hs_err文本文件
            c.日志文件:包含应用程序日志、java日志
            d.启动-XX:+HeapDumpOnOutOfMemoryError标记生成的java堆信息
            e.JFR-如果应用程序遇到问题没有终止,转存连续记录。

         如果应用程序停止响应,收集如下信息:
            f.堆栈信息,在重新启动应用程序前执行jcmd <pid> Thread.print获取堆栈信息。
            g.Dump flight recordings (if enabled).
            h.强制core file。如果应用程序不能正常关闭,则停止应用程序,并在Linux或Solaris系统上使用kill -6 <pid>命令强制core文件。

        如何使java应用程序更易于调试:
            使用java日志框架是一种好方法。如果在特定模块中遇到问题,您应该能够在该模块中启用日志记录。指定不同的日志记录级别也不错,例如info、debug、trace。java.util.logging框架的使用方法请参见Java日志技术。

  • 相关阅读:
    [文档].艾米电子 移位寄存器,Verilog
    [书籍].Pong P. Chu FPGA Prototyping By Verilog Examples
    [转载].FPGA三国志
    [笔记].电机行业常用的中英文对照
    [原创][连载].基于SOPC的简易数码相框 – Nios II SBTE部分(软件部分) 配置工作
    [转载].振南带你入门FAT32文件系统 视频
    [文档].艾米电子 在综合中使用函数,Verilog
    [转载].阿迪老师 《SD卡入门到精通》视频
    [文档].艾米电子 寄存器,Verilog
    [笔记].怎样消除pointer targets in passing argument n of 'func_xxx' differ in signedness警告
  • 原文地址:https://www.cnblogs.com/yickel/p/12519643.html
Copyright © 2011-2022 走看看