调优JVM其实就是在【理解JVM内存结构】以及各种【垃圾收集器】的前提下,结合自己的业务来【调整参数】,使自己的应用能够正常稳定的运行。
JVM调优的三大指标参考:
- 吞吐量
- 停顿时间
- 垃圾回收频率
停顿时间:让整个程序停止一些事务的处理
基于这些指标,我们可以调整:
- 内存区域大小以及相关策略,比如调整堆内存占多少,新生代占多少,老年代占多少,Survivor占多少等等。可以通过参数调整:
一般来说,对于【IO密集型】可以将【年轻代】空间加大些,因为大多数对象都是在年轻代灭亡。【CPU密集型】可以将【老年代】空间加大,对象的存活时间会更长些。
调优过程中,需要借助工具进行排查:
- 通过
jps
命令查看Java进程基础信息,比如进程号,主类。 - 通过
jstat
命令查看Java进程统计类相关信息(类加载,编译相关信息统计,各个内存区域GC概况和统计)。 - 通过
jinfo
命令来查看和调整Java进程的运行参数。 - 通过
jmap
命令查看Java进程的内存信息。 - 通过
jstack
命令查看JVM线程信息,这个命令常用于排查死锁相关问题 - 使用阿里开源的Arthas(阿尔萨斯)工具,这个工具涵盖了很多命令且自带图形化界面。
- 使用JDK自带的
Jconsole
工具,