这一篇主要记录一下jvm的调优工具和参数
JVM调优我们用到的工具:
jps:
JVM Process Status Tool,
显示指定系统内所有的
HotSpot
虚拟机进程。(还可以使用 ps aux|grep java
)
jstat:
JVM statistics Monitoring
是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机
进程中的类装载、内存、垃圾收集、
JIT
编译等运行数据。
jstat
可以参考:
https://www.cnblogs.com/sxdcgaq8080/p/11089841.html
jmap:
JVM Memory Map
命令用于生成
heap dump
文件
jmap
可以参考:
https://www.cnblogs.com/sxdcgaq8080/p/11089664.html
jhat:
JVM Heap Analysis Tool
命令是与
jmap
搭配使用,用来分析
jmap
生成的
dump
,
jhat
内置了
一个微型的
HTTP/HTML
服务器,生成
dump
的分析结果后,可以在浏览器中查看
jhat
可以参考:
https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html
也可以使用
eclipse
中
mat(Memory Analyzer)
jstack:
用于生成
java
虚拟机当前时刻的线程快照。
jstack
可以参考:
https://www.jianshu.com/p/8d5782bc596e
jinfo:
JVM Confifiguration info
这个命令作用是实时查看和调整虚拟机运行参数
jinfo
参考:
https://www.jianshu.com/p/8d8aef212b25
调优工具:
常用调优工具分为两类
,jdk
自带监控工具:
jconsole
和
jvisualvm
,第三方有:
MAT(Memory Analyzer
Tool)
、
GChisto
。
jconsole
,
Java Monitoring and Management Console
是从
java5
开始,在
JDK
中自带的
java
监控
和管理控制台,用于对
JVM
中内存,线程和类等的监控
jvisualvm
,
jdk
自带全能工具,可以分析内存快照、线程快照;监控内存变化、
GC
变化等。
MAT
,
Memory Analyzer Tool
,一个基于
Eclipse
的内存分析工具,是一个快速、功能丰富的
Java
heap
分析工具,它可以帮助我们查找内存泄漏和减少内存消耗
GChisto
,一款专业分析
gc
日志的工具
JVM
性能调优
设定堆内存大小
-Xmx
:堆内存最大限制。
设定新生代大小。 新生代不宜太小,否则会有大量对象涌入老年代
-XX:NewSize
:新生代大小
-XX:NewRatio
新生代和老生代占比
-XX:SurvivorRatio
:伊甸园空间和幸存者空间的占比
设定垃圾回收器 年轻代用
-XX:+UseParNewGC
年老代用
-XX:+UseConcMarkSweepGC
-
XX:
MetaspaceSize=
512
M -
XX:
MaxMetaspaceSize=
1024
M 设置元空间大小,jdk1.8以后这么设置,以前:
-
XX:
PermSize=
512
M -
XX:
MaxPermSize=
1024
M
MetaspaceSize如果不做配置,通过jinfo查看默认MetaspaceSize大小(约21M),MaxMetaspaceSize很大很大,MetaSpace只受本地内存大小限制。
(MetaspaceSize表示metaspace首次使用不够而触发FGC的阈值,只对触发起作用,原因是:垃圾搜集器内部是根据变量_capacity_until_GC来判断metaspace区域是否达到阈值的,初始化代码如下所示:
void MetaspaceGC::initialize() {
// Set the high-water mark to MaxMetapaceSize during VM initializaton since
// we can't do a GC during initialization.
_capacity_until_GC = MaxMetaspaceSize;}
GC收集器会在发生对metaspace的回收会,会计算新的_capacity_until_GC值,以后发生FGC就跟MetaspaceSize没有关系了)
*任何一个JVM参数的默认值可以通过java -XX:+PrintFlagsFinal -version |grep JVMParamName获取,例如:java -XX:+PrintFlagsFinal -version |grep MetaspaceSize
采用java -jar 启动系统
java -Xms512M -Xmx512M -Xmn256M -Xss1M -XX:PermSize=128M -XX:MaxPermSize=128M -jar app.jar