查看JVM参数信息jinfo

C:\Users\admin>jps -l
6656 org.jetbrains.idea.maven.server.RemoteMavenServer
12276
19976 org.jetbrains.jps.cmdline.Launcher
20168 com.qyl.jvmtools.JvmtoolsApplication
13916 sun.tools.jps.Jps

C:\Users\admin>jinfo 20168
Attaching to process ID 20168, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
Java System Properties:

spring.output.ansi.enabled = always
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.181-b13
sun.boot.library.path = C:\Program Files\Java\jdk1.8.0_181\jre\bin
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation

JVM参数信息:

VM Flags:
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=31457280 -XX:+ManagementServer -XX:MaxHeapSize=31457280 -XX:MaxNewSize=10485760 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=10485760 -XX:OldSize=20971520 -XX:+PrintGCDetails -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line: -Xms30m -Xmx30m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:D:\ProgramFiles\JetBrains\IntelliJIDEA20191\lib\idea_rt.jar=51100:D:\ProgramFiles\JetBrains\IntelliJIDEA20191\bin -Dfile.encoding=UTF-8

参数含义:
Command line: -Xms30m -Xmx30m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails
这个是在idea配置中添加的:
在这里插入图片描述

1、-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。
2、-Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。

开发过程中,通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。

1、-XX:newSize:表示新生代初始内存的大小,应该小于-Xms的值;
2、-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;
3、-Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。

java虚拟机对非堆区内存配置的两个参数:
1、-XX:PermSize:表示非堆区初始内存分配大小(方法区)
2、-XX:MaxPermSize:表示对非堆区分配的内存的最大上限(方法区)。
    
在配置之前一定要慎重的考虑一下自身软件所需要的非堆区内存大小,因为此处内存是不会被java垃圾回收机制进行处理的地方。并且更加要注意的是最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。
————————————————
版权声明:本文为CSDN博主「byds520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lovewebeye/article/details/80911838
 -XX:-BytecodeVerificationLocal 
 -XX:-BytecodeVerificationRemote 
 -XX:CICompilerCount=4 
 -XX:+HeapDumpOnOutOfMemoryError 
 -XX:InitialHeapSize=31457280   
 (30M)
 -XX:+ManagementServer 
 -XX:MaxHeapSize=31457280 
 (30M)
 -XX:MaxNewSize=10485760 
(10M) 三分之一
 -XX:MinHeapDeltaBytes=524288
  -XX:NewSize=10485760 
  (10M) 三分之一新生代
  -XX:OldSize=20971520 
  (10M) 三分之二 老年代
  -XX:+PrintGCDetails 
  -XX:TieredStopAtLevel=1 
  -XX:+UseCompressedClassPointers 
  -XX:+UseCompressedOops 
  -XX:+UseFastUnorderedTimeStamps 
  -XX:-UseLargePagesIndividualAllocation 
  -XX:+UseParallelGC
  ParallelGC内存回收算法
  JDK9之前Parallel Scavenge(并行标记-复制算法)+	Serial Old (PS MarkSweep)的收集器组合进行内存回收。

JVM所有参数一览https://www.jianshu.com/p/f5b3128c20f4

Java jinfo 命令详解

https://blog.csdn.net/yx0628/article/details/80958488

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下:

[root@admin ~]# jinfo --help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message

我们先用 jps 命令查到 PID ,然后可以通过 jinfo 来查看对应进程的参数信息:

[root@admin ~]# jps
43520 Test
35900 Jps

查看 JVM 参数:

[root@admin ~]# jinfo -flags 43520
Attaching to process ID 43520, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.45-b08

-Dfile.encoding=GBK

查看系统参数:

[root@admin ~]# jinfo -sysflags 43520

虚拟机的参数可以通过这个命令查看:

扫描二维码关注公众号,回复: 11110138 查看本文章
java -XX:+PrintFlagsFinal -version | grep manageable

除了通过启动脚本可以设置参数,PrintGC 默认是打开的,因此我们只需要打开 PrintGCDetails 参数。

jinfo -flag +PrintGC 43520
jinfo -flag +PrintGCDetails 43520

关闭 GC 日志的话同理:

jinfo -flag -PrintGC 43520
jinfo -flag -PrintGCDetails 43520

查看是否开启 GC 日志的打印:

jinfo -flag PrintGC 43520
jinfo -flag PrintGCDetails 43520

[root@admin ~]# jinfo -flag PrintGC 43520
-XX:-PrintGC

[root@admin ~]# jinfo -flag PrintGCDetails 43520
-XX:-PrintGCDetails

常用 JVM 参数:

-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64-XX:MaxPermSize:设置持久代最大值。物理内存的1/4
发布了25 篇原创文章 · 获赞 7 · 访问量 911

猜你喜欢

转载自blog.csdn.net/m0_46485771/article/details/105723943
今日推荐