JVM学习笔记(四)——JVM调优前的准备

JVM参数

 

标准参数

指在JVM中比较稳定的参数(在各个jdk版本中不会变动) 如 -version   -help  -server  -cp

 

-X参数

非标准参数,指在JDK各版本中可能会变动的参数,如:

-Xint 解释执行

-Xcomp 第一次使用就编译成本地代码

-Xmixed 混合模式, JVM 自己来决定
 
 

-XX参数

用于调用和debug的参数,也是日常用的最多的参数

Boolean 类型
格式: -XX:[+-] + - 表示启用或者禁用 name 属性
比如: -XX:+UseConcMarkSweepGC 表示启用 CMS 类型的垃圾回收器
-XX:+UseG1GC 表示启用 G1 类型的垃圾回收器
 
Boolean 类型
格式: -XX= 表示 name 属性的值是 value
比如: -XX:MaxGCPauseMillis=500  设置GC停顿时间
 
 

其它参数

等于是-XX参数的缩写版

-Xms1000 等价于 -XX:InitialHeapSize=1000
-Xmx1000 等价于 -XX:MaxHeapSize=1000
-Xss100 等价于 -XX:ThreadStackSize=100
 
 

常用的一些参数

-XX:CICompilerCount=3 最大并行编译数 并行数太大的话会影响稳定性
-XX:InitialHeapSize=100M 初始化堆大小 简写-Xms100M
-XX:MaxHeapSize=100M 最大堆大小 简写-Xmx100M
-XX:NewSize=20M 设置年轻代的大小
-XX:MaxNewSize=50M 年轻代最大大小
-XX:OldSize=50M 设置老年代大小
-XX:MetaspaceSize=50M 设置方法区大小
-XX:MaxMetaspaceSize=50M 方法区最大大小
-XX:+UseParallelGC 使用UseParallelGC 新生代,吞吐量优先
-XX:+UseParallelOldGC 使用UseParallelOldGC 老年代,吞吐量优先
-XX:+UseConcMarkSweepGC 使用CMS 老年代,停顿时间优先
-XX:+UseG1GC 使用G1GC 新生代,老年代,停顿时间优先
-XX:NewRatio 新老生代的比值 比如-XX:Ratio=4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5
-XX:SurvivorRatio 两个S区和Eden区的比值 比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8, 也就是一个S占整个新生代的1/10
-XX:+HeapDumpOnOutOfMemoryError 启动堆内存溢出打印 当JVM堆内存发生溢出时,也就是OOM,自动生成dump文件
-XX:HeapDumpPath=heap.hprof 指定堆内存溢出打印目录 表示在当前目录生成一个heap.hprof文件
-Xss128k 设置每个线程的堆栈大小
-XX:InitiatingHeapOccupancyPercent 启动并发GC周期时堆内存使用占比 G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆
的使用率,而不只是某一代内存的使用比. 值为 0 则表示"一直执行GC循环". 默认值为45
-XX:G1HeapWastePercent 允许的浪费堆空间的占比 默认是10%,如果并发标记可回收的空间小于10%,则不会触发MixedGC
-XX:MaxGCPauseMillis=200ms G1最大停顿时间
-XX:ConcGCThreads=n 并发垃圾收集器使用的线程数量 默认值随JVM运行的平台不同而不同

 

JVM参数设置方法

运行 jar 包时设置: java -XX:+UseG1GC xx.jar
在IDEA eclipse设置
Tomcat则在catalina.bat里面设置,JAVA_OPTS选项
jdk命令 jinfo设置
 
 

JDK常用命令

jps:虚拟机进程状况工具

显示当前所有java进程pid的命令,格式:jps [参数] [主机,可以是ip或域名,协议,端口等]

常用参数:

-q 只显示PID

-v  显示虚拟机参数   

-m 显示传递给main()函数的参数   

-l   显示主类的全路径

 

jstat:虚拟机统计信息监视工具

显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据

jstat [操作]  [vmid] [查询间隔,单位毫秒] [查询次数]

如 jstat -gc 2222 300  20  表示查询查询进程号2222的垃圾收集情况,每300毫秒一次,一共查20次

常用参数:

-class 监视类加载、卸载数量、总空间以及类装载所耗费的时间
-gc  监视Java堆状况,包括Eden区、2个 Survivor区、老年代、永久代等的容量,已用空间,垃圾收集时间合计等信息
-gccapacity  监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil 功能一样,但是会额外输出导致上一次垃圾收集产生的原因
-gcnew 监视新生代垃圾收集状况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold 监视老年代垃圾收集状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空问
-gcpermcapacity 输出永久代使用到的最大,最小空间
-compiler 输出即时编译器编译过的方法、耗时等信息
-printcompilation 输出已经被即时编译的方法

 

jinfo:Java配置信息工具

实时查看和调整虚拟机各项参数

jinfo [参数] [PID]   常用参数 -flag

查看MaxHeapSize的参数

jinfo -flag MaxHeapSize 2333  显示结果-XX:MaxHeapSize = 12312321

修改MaxHeapSize参数

jinfo -flag  -XX:MaxHeapSize=2222222

 

jmap:Java内存映像工具

用于生成堆转储快照(一般称为heapdump或dump文件)

jamp [参数] [vmid]

常用参数:

-dump 生成Java堆转储快照。格式为-dump:[live,]format=b,file=.其中live子参数说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效
-heap 显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等。只在Linux/Solaris平台下有效
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。只在 Linux/Solaris平台下有效

dump文件作用是用来分析java程序的内存情况,比如OutofMemoryError异常就可以导出dump文件分析

 jmap -dump:file=文件路径/文件名 进程号

 

jhat:虚拟机堆转储快照分析工具

与jmap搭配使用,来分析jmap生成的堆转储快照

执行jhat  导出的dump文件,出现Server is ready在浏览器输入http://localhost:7000/可进入分析页面

 

jstack:Java堆栈跟踪工具

用于生成虚拟机当前时刻的线程快照

jstack [参数] [vmid]

常用参数:

-F 当正常输出的请求不被响应时,强制输出线程堆栈
-1 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈

jvisualvm

常用工具

jconsole

JDK 自带的可视化监控工具。查看 java 应用程序的运行概况、监控堆信息、永久区使用 情况、类加载情况等。
使用,命令行直接输入jconsole
 

jvisualvm

JDK 自带的可视化监控工具。可以用于监控本地或远程的java程序进程
使用,命令行直接输入jvisualvm
 

JVM学习笔记(四)——JVM调优前的准备_第1张图片

 

Arthas

阿里巴巴开源的java诊断工具

github地址:https://github.com/alibaba/arthas

 

你可能感兴趣的:(Java学习笔记,#,JVM,jvm,java)