文章目录
1. JVM的参数类型
系统分析java的参数类型可以划分为一下三种类型,XX参数为最常用的一些命令类型。
1. 标配参数
比如-version(显示当前jjava的版本)、-help(寻找帮助文档)、-showversion(输出产品版本并继续)等,几乎不会改变。
2. X参数
设置java的执行模式
比如-Xint,解释执行模式;-Xcomp,编译模式;-Xmixed,开启混合模式(默认)
3. XX参数
这一类是通常jvm调优需要关注的参数,又可以按照参数类型划分为如下两种:
1.布尔类型
公式:-XX:+某个属性、-XX:-某个属性,开启或关闭某个功能。其中+表示开启,-表示关闭
比如-XX:+PrintGCDetails
(是否打印GC的收集信息),开启GC详细信息。
可以通过如下命令查看jvm对应的信息是否开启
- jps -l // 通过该命令查看对一个的后台运行java程序
- // jinfo -flag PrintGCDetails 进程号 查看具体的信息
下图中表示该进程没有开启GC详细信息收集
当然可以在程序启动时添加对应的信息,也可以在控制台开启。
2. KV键值类型
- 通常用于设置或者查看一些基本信息
公式:-XX:属性key=值value。比如-XX:Metaspace=128m、-XX:MaxTenuringThreshold=15。
- 如何查看一些常用基础设置
使用jps -l配合jinfo -flags pid可以查看所有参数。
也可以使用java -XX:+PrintFlagsInitial
查看默认设置
-
查看修改之后的设置值
java -XX:+PrintFlagsFinal
与上面类似。只是修改过后是:=
而不是=
。 -
查看常见参数
如果不想查看所有参数,可以用java -XX:+PrintCommandLineFlags
查看常用参数。
-XX:InitialHeapSize=134217728
-XX:MaxHeapSize=2147483648
-XX:+PrintCommandLineFlags
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:+UseParallelGC
2. 基本的参数
1. -Xmx/-Xms
-Xmx等价于 -XX:InitialHeapSize
-Xms等价于-XX:maxHeapSize
最大和初始堆大小。最大默认为物理内存的1/4,初始默认为物理内存的1/64。
2. -Xss
等价于-XX:ThreadStackSize
。用于设置单个栈的大小,系统默认值是0,不代表栈大小为0。而是根据操作系统的不同,有不同的值。比如64位的Linux系统是1024K,而Windows系统依赖于虚拟内存。
3. -Xmn
新生代大小,一般不调。
4. -XX:MetaspaceSize
设置元空间大小。(元空间本质和永久代类似,不在虚拟机中,使用的是本地内存)
可以通过如下命令设置元空间大小
jinfo -flag MetaspaceSize=21807154 13014
5.-XX:+PrintGCDetails
输出GC收集信息,包含GC和Full GC信息。
6.-XX:SurvivorRatio
新生代中,Eden区和两个Survivor区的比例,默认是8:1:1。通过-XX:SurvivorRatio=4改成4:1:1
7.-XX:NewRatio
老生代和新年代的比列,默认是2,即老年代占2,新生代占1。如果改成-XX:NewRatio=4,则老年代占4,新生代占1。
8.-XX:MaxTenuringThreshold
新生代设置进入老年代的时间,默认是新生代逃过15次GC后,进入老年代。如果改成0,那么对象不会在新生代分配,直接进入老年代。
3. 常用命令
1. jps
在第一节中利用到了两个常见的命令:jps
、jinfo
- jps:JVM process Status Tools(列出正在运行中的虚拟机进程)
命令如下:
jps [常用命令] [进程号]
常用命令 | 作用 |
---|---|
-q | 只输出进程号 |
-m | 输出虚拟机进程启动时传递给主类main()函数的参数 |
-l | 进程号 类全称路径 |
-v | 虚拟机该进程启动时的参数 |
主要显示如下内容:
进程号+正在执行的主类名
2. jinfo
jinfo的用法通过如下:
jinfo [option] (最常用的)
其中[option]通常可用如下命令:
option | 含义 |
---|---|
-flag <name> |
打印对应的虚拟机参数 |
-flag [+|-]<name> |
用于设置boolean类型的参数 +表示开启,-表示关闭 |
-flag <name>=<value> |
用于设置k-v类型的参数 |
-flags |
打印虚拟机有哪些可以设置的信息 |
-sysprops |
打印java的系统设置 |
<no option> |
打印以上所有的信息 |
-h | -help |
打印帮助文档信息 |
比如:查看jvm垃圾回收的详细信息:
jinfo -flag +PrintGCDetails 17017
3. jstack
查看JVM中运行线程的状态,比较重要。可以定位CPU占用过高位置,定位死锁位置。
常用命令:
jstack [ option ] pid
option中可用命令:
命令 | 含义 |
---|---|
-F | 当jstack [-l] pid 没有反应式,可以用jstack [-F] pid 强制打印堆栈存储信息 |
-l | 打印堆栈信息,并且会额外打印锁的信息,通常可用于分析死锁 |
-m | 打印java及本地C、C++方法的堆栈信息 |
-h | 可以利用 jstack -h 寻求帮助文档 |
4. jstat
jstat统计信息监视工具
但是一般会借用工具分析
如果真正的用到可以查看官方文档jstat
5. jmap
JVM内存映像工具。