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:查找响应慢/无响应