这一篇主要记录一下jvm的调优工具和参数
JVM调优我们用到的工具:
jps: JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。(还可以使用 ps aux|grep java)
jstat: JVM statistics Monitoring是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jmap: JVM Memory Map命令用于生成heap dump文件
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虚拟机当前时刻的线程快照。
jinfo: JVM Confifiguration info 这个命令作用是实时查看和调整虚拟机运行参数
调优工具:
常用调优工具分为两类,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=512M -XX:MaxMetaspaceSize=1024M 设置元空间大小,jdk1.8以后这么设置,以前: -XX:PermSize=512M -XX:MaxPermSize=1024M
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