【JVM-03】java虚拟机——jvm调优的基本参数及命令

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对应的信息是否开启

  1. jps -l // 通过该命令查看对一个的后台运行java程序
  2. // jinfo -flag PrintGCDetails 进程号 查看具体的信息
    下图中表示该进程没有开启GC详细信息收集
    在这里插入图片描述
    当然可以在程序启动时添加对应的信息,也可以在控制台开启。
    在这里插入图片描述

2. KV键值类型

  1. 通常用于设置或者查看一些基本信息
    公式:-XX:属性key=值value。比如-XX:Metaspace=128m、-XX:MaxTenuringThreshold=15。
    在这里插入图片描述
  2. 如何查看一些常用基础设置
    使用jps -l配合jinfo -flags pid可以查看所有参数。

也可以使用java -XX:+PrintFlagsInitial查看默认设置
在这里插入图片描述

  1. 查看修改之后的设置值
    java -XX:+PrintFlagsFinal
    与上面类似。只是修改过后是:=而不是=

  2. 查看常见参数
    如果不想查看所有参数,可以用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

在第一节中利用到了两个常见的命令:jpsjinfo

  1. 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内存映像工具。

发布了97 篇原创文章 · 获赞 19 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章