目录

jvm性能调优工具

jdk自带工具

jps-jvm进程状态工具

jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。

参数说明

-q:只输出进程 ID -m:输出传入 main 方法的参数 -l:输出完全的包名,应用主类名,jar的完全路径名 -v:输出jvm参数 -V:输出通过flag文件传递到JVM中的参数

jstat -gc pid

jinfo -flag NewRatio pid

jinfo -flag SurvivorRatio pid

UseAdaptiveSizePolicy

jinfo -flag UseTLAB pid

jstat-JVM统计监控工具

jstat命令列出已检测到的Java HotSpot VM的性能统计信息

  • -class监控类加载器统计信息,当然我们还可以监控垃圾收集堆统计信息(-gc)等信息。
  • -compiler Java HotSpot VM即时编译器统计信息。
  • -gc 垃圾收集堆统计信息。
  • -gcutil 垃圾收集统计摘要。
  • -gccause 此选项显示与-gcutil选项相同的垃圾回收统计信息摘要,但包括上次垃圾回收事件的原因以及(如果适用)当前垃圾回收事件的原因。除了为-gcutil列出的列之外,此选项还添加以下列。
    • LGCC 上次垃圾收集的原因
    • GCC 当前垃圾收集的原因
  • -gcnew 新生代垃圾回收统计
  • -gcnewcapacity 新生代内存空间大小统计
  • -gcold 老年代和元空间(metaspace)垃圾回收统计
  • -gcoldcapacity 老生代内存空间大小统计
  • -gcmetacapacity 元空间(metaspace)内存空间大小统计
  • -printcompilation Java HotSpot VM编译方法统计
  • -gccapacity 内存池生成和空间容量。

jinfo

jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息

用法

https://gitee.com/lienhui68/picStore/raw/master/null/20200720105800.png

参数说明

  • pid 对应jvm的进程id
  • executable core 产生core dump文件
  • [server-id@]remote server IP or hostname 远程的ip或者hostname,server-id标记服务的唯一性id

Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。 应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。

option

  • no option 输出全部的参数和系统属性
  • -flag name 输出对应名称的参数
  • -flag [+|-]name 开启或者关闭对应名称的参数
  • -flag name=value 设定对应名称的参数
  • -flags 输出全部的参数
  • -sysprops 输出系统属性

示例一:no option

命令:jinfo pid

描述:输出当前 jvm 进程的全部参数和系统属性

https://gitee.com/lienhui68/picStore/raw/master/null/20200720110022.png

示例二:-flag name

命令:jinfo -flag name pid 描述:输出对应名称的参数值

https://gitee.com/lienhui68/picStore/raw/master/null/20200720110123.png

使用该命令,可以查看指定的 jvm 参数的值。如:查看当前 jvm 进程是否开启打印 GC 日志。

示例三:-flag [+|-]name

命令:jinfo -flag [+|-]name pid 描述:开启或者关闭对应名称的参数

使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。

使用如下:

https://gitee.com/lienhui68/picStore/raw/master/null/20200720110157.png

示例四:-flag name=value

命令:jinfo -flag name=value pid 描述:修改指定参数的值。

同示例三,但示例三主要是针对 boolean 值的参数设置的。 如果是设置 value值,则需要使用 name=value 的形式。

使用如下:

https://gitee.com/lienhui68/picStore/raw/master/null/20200720110725.png

jinfo虽然可以在java程序运行时动态地修改虚拟机参数,但并不是所有的参数都支持动态修改

示例五: -flags

命令:jinfo -flags pid 描述:输出全部的参数

https://gitee.com/lienhui68/picStore/raw/master/null/20200720110357.png

示例六:-sysprops

命令:jinfo -sysprops pid 描述:输出当前 jvm 进行的全部的系统属性

https://gitee.com/lienhui68/picStore/raw/master/null/20200720110505.png

Mat

问题解决

mac出现The platform metadata area could not be written

解压缩打开后出现

1
2
3
4
5
java.lang.IllegalStateException: The platform metadata area could not be written: /private/var/folders/9q/mwly537j18s953n614zgb6fh0000gn/T/AppTranslocation/936BF7AC-F882-4F69-8B2D-1DEE9B449D9B/d/mat.app/Contents/MacOS/workspace/.metadata.  By default the platform writes its content
under the current working directory when the platform is launched.  Use the -data parameter to
specify a different content area for the platform.
	at org.eclipse.core.internal.runtime.DataArea.assertLocationInitialized(DataArea.java:70)
	at org.eclipse.core.internal.runtime.DataArea.getStateLocation(DataArea.java:138)

解决:

打开 /Applications/mat.app/Contents/Eclipse/MemoryAnalyzer.ini文件添加以下两行

![image-20200722191537961](/Users/david/Library/Application Support/typora-user-images/image-20200722191537961.png)

在相应位置新建mat_data文件夹

重新打开即可