一个不再被支持的命令 jinfo 了解一下!

在 java 8 中 jinfo 命令提示不在支持了,但是还可以使用。后面的版本可能会抛弃它。建议采用 jps 和 jsadebugd 两个命令取代 jinfo 命令。

jinfo 是 java 虚拟机自带的 Java 配置信息工具。

jinfo 的作用是实时地查看和调整虚拟机的各项参数,使用 Jps 命令的 -v 参数可以查看虚拟机启动时显示指定的参数列表。

用法格式如下:

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP

各参数解释如下:

  • pid:进程号
  • executable:产生core dump的java executable
  • core:core file
  • remote-hostname-or-IP:主机名或ip
  • server-id:远程主机上的debug server的唯一id

jinfo 命令支持的选项有下面 4 种:

  • no option:打印命令行参数和系统属性
  • -flags:打印命令行参数
  • -sysprops:打印系统属性
  • -h:帮助

执行 jinfo 和 jinfo -help、jinfo -h 都将打印帮助信息。

常用的命令如下:

jinfo -sysprops 770
jinfo -flags 770
jinfo -flag +PrintGC 770
jinfo -flag +PrintGCDetails 770
jinfo -flag -PrintGC 770
jinfo -flag -PrintGCDetails 770
jinfo -flag PrintGC 770
jinfo -flag PrintGCDetails 770

常用 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。

这些参数都可以通过 java -XX:+PrintFlagsFinal -version | grep manageable 命令获取到。

java -XX:+PrintFlagsFinal -version | grep manageable
~ java -XX:+PrintFlagsFinal -version | grep manageable
     intx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}
     intx CMSTriggerInterval                        = -1                                  {manageable}
     intx CMSWaitDuration                           = 2000                                {manageable}
     bool HeapDumpAfterFullGC                       = false                               {manageable}
     bool HeapDumpBeforeFullGC                      = false                               {manageable}
     bool HeapDumpOnOutOfMemoryError                = false                               {manageable}
    ccstr HeapDumpPath                              =                                     {manageable}
    uintx MaxHeapFreeRatio                          = 100                                 {manageable}
    uintx MinHeapFreeRatio                          = 0                                   {manageable}
     bool PrintClassHistogram                       = false                               {manageable}
     bool PrintClassHistogramAfterFullGC            = false                               {manageable}
     bool PrintClassHistogramBeforeFullGC           = false                               {manageable}
     bool PrintConcurrentLocks                      = false                               {manageable}
     bool PrintGC                                   = false                               {manageable}
     bool PrintGCDateStamps                         = false                               {manageable}
     bool PrintGCDetails                            = false                               {manageable}
     bool PrintGCID                                 = false                               {manageable}
     bool PrintGCTimeStamps                         = false                               {manageable}
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

参考资料

  • jinfo

一个不再被支持的命令 jinfo 了解一下!

: » 一个不再被支持的命令 jinfo 了解一下!

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/tech/java/251993.html

(0)
上一篇 2022年5月3日 21:31
下一篇 2022年5月3日 21:35

相关推荐

发表回复

登录后才能评论