参考
https://blog.csdn.net/weixin_42447959/article/details/81637909
JVM 调优指标
- 内存占用:程序正常运行需要的内存大小。
- 延迟:由于垃圾收集而引起的程序停顿时间。
- 吞吐量:用户程序运行时间占用户程序和垃圾收集占用总时间的比值。
JVM 日志
调优可以依赖、参考的数据有系统运行日志、堆栈错误信息、gc日志、线程快照、堆转储快照等。
-
系统运行日志:在程序代码中打印出的日志,即 logger 出的日志,描述了代码级别的系统运行轨迹(执行的方法、入参、返回值等)
-
堆栈错误信息:当系统出现异常后,可以根据堆栈信息初步定位问题所在
-
GC日志:程序启动时用 -XX:+PrintGCDetails 和 -Xloggc:/data/jvm/gc.log 可以在程序运行时把gc的详细过程记录下来,或者直接配置“-verbose:gc”参数把gc日志打印到控制台
-
线程快照:查看线程在某一时刻的状态,当系统中可能存在请求超时、死循环、死锁等情况时,可以根据线程快照来进一步确定问题。通过执行虚拟机自带的“ jstack pid ”命令,可以 dump 出当前进程中线程的快照信息,
-
堆转储快照:程序启动时可以使用 “-XX:+HeapDumpOnOutOfMemory” 和 “-XX:HeapDumpPath=/data/jvm/dumpfile.hprof”,当程序发生内存溢出时,把当时的内存快照以文件形式进行转储(也可以直接用 jmap 命令转储程序运行时任意时刻的内存快照)
JVM 调优工具
-
jps(JVM process Status):查看虚拟机启动的所有进程、执行主类的全名、JVM启动参数
-
jstat(JVM Statistics Monitoring Tool):监视虚拟机信息,Java堆状况(各个区的容量、使用容量、gc时间等信息)
-
jmap(Memory Map for Java):查看堆内存信息 、每个类的实例数量和内存占用。jmap -dump 可以转储堆内存快照到指定文件
-
jconsole、jvisualvm:分析内存信息(各个区如Eden、Survivor、Old等内存变化情况)、线程数、类加载数和CPU占用率、GC情况、每个线程的堆栈信息、检测死锁、JVM参数
-
jhat(JVM Heap Analysis Tool) :分析内存快照