搭建JAVA诊断采集数据

1 Enable core file

         java 运行的过程中,产生java heap,会占用大量的磁盘空间,因此,一般只有在发生java crash现象时或gdb调试java本地代码时,才开启ulimit -c unlimited,进行诊断错误。

2 Add -XX:+HeapDumpOnOutOfMemoryError to the JVM flags

       java运行发生内存错误时,检查产生内存错误原因,需开启该参数。该参数,跟开启core file一样,在 java运行中产生的java heap ,会导致文件非常的大。通过与jhat工具结合使用,检测出对象占用内存情况及未能正确释放内存的对象

3 Run a continuous Java flight recording

     使用java 飞行记录器,因java飞行器有商业性质,免费使用仅限于桌面系统,若要在生产环境服务端使用JFR,需要购买license.若java系统运行出现问题,JFR记录了最近一个小时的情况,通过这些数据分析,就能诊断产生异常的原因。如:内存泄漏,cpu负载过高,线程阻塞等

4 Add -verbosegc to the JVM command-line

  开启该参数,采集到Garbage 相关的信息 例如:回收器运行了多长时间,内存释放花了多长时间,根据这些数据,有利于诊断产生OutOFMemoryError原因.从jdk7开始,通过设置-Xloggc:<filename>   -XX:UseGCLogFileRotation和-XX:-NumberOfGCLogFiles=1 参数来输出到指定文件。

5 Print Java version and JVM flags

  java运行具体jvm那个版本,除了使用java -version判断外,还可以使用参数-XX+PrintCommandLineFlags-showversion检查版本

6Set up JMC JMX for remote monitoring

         通过搭建jmc jmx,进行监控和诊断远程java application,这个具有很强的实用性,一般应用部署在linux 服务器上,要对其运行在服务器上的java进行诊断。直接使用jmx工具监控vm或者命令jcmd <pid> help ManagementAgent.start 均可达到目的。

总结:

   core file [hs_err]:查找java application崩溃原因

      JFR:  使用飞行记录器信息,查找appliaction 系统运行异常原因。

  -XX:+HeapDumpOnOutOfMemoryError:查找内存泄露问题

      导出hprof 可增加参数指定路径 -XX:HeapDumpPath=/path/to 或/path/to/file

                                                   

  jcmd <pid> Thread.print/JFR:查找响应慢/无响应

猜你喜欢

转载自liuyijie2007.iteye.com/blog/2380914