JVM学习笔记四:虚拟机性能监控与故障处理工具

JVM client模式和Server模式的区别

JVM client模式和Server模式启动,分别针对桌面应用和服务器应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快。
Java HotSpot虚拟机默认不带参数启动会首先检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动,而检测的根据是至少2个CPU和最低2GB内存。

虚拟机模式切换

如果只是临时切换,可以直接使用命令行执行,格式如:java -模式(client或server) classname

如果永久切换可以修改配置文件,配置文件在“JAVA_HOME/jre/lib/i386/jvm.cfg”,我们可以看到JVM默认的顺序:

  1. -client KNOWN
  2. -server KNOWN
  3. -hotspot ALIASED_TO -client
  4. -classic WARN
  5. -native ERROR
  6. -green ERROR

只需要把-server和-clent调换顺序即可

  1. -server KNOWN
  2. -client KNOWN
  3. -hotspot ALIASED_TO -client
  4. -classic WARN
  5. -native ERROR
  6. -green ERROR

JVM工作在Server模式可以大大提高性能,但应用的启动会比client模式慢大概10%。当JVM用于启动GUI界面的交互应用时适合于使用client模式,当JVM用于运行服务器后台程序时建议用Server模式。

默认Java堆大小 (即Xms和Xmx默认值)

hotspot虚拟机的默认堆大小如果未指定,他们是根据服务器物理内存计算而来的

client模式下,JVM初始和最大堆大小为:

在物理内存达到192MB之前,JVM最大堆大小为物理内存的一半,否则,在物理内存大于192MB,在到达1GB之前,JVM最大堆大小为物理内存的1/4,大于1GB的物理内存也按1GB计算,举个例子,如果你的电脑内存是128MB,那么最大堆大小就是64MB,如果你的物理内存大于或等于1GB,那么最大堆大小为256MB。

Java初始堆大小是物理内存的1/64,但最小是8MB。

server模式下:

与client模式类似,区别就是默认值可以更大,比如在32位JVM下,如果物理内存在4G或更高,最大堆大小可以提升至1GB,,如果是在64位JVM下,如果物理内存在128GB或更高,最大堆大小可以提升至32GB。

jdk 命令行工具

jps 虚拟机进程状况工具 jps -l -v -l 输出主类的全名 -v 输出虚拟机启动参数 -m 输出main函数的参数;

jstat 虚拟机统计信息监视工具 jstat -gcutil 2764
jinjiprojectnaotu
jinfo java配置信息工具

jinfo -flag MaxHeapSize 6950 打印VMID为6950的JVM进程的大Java堆大小

jinfo -flag InitialHeapSize 6950 打印VMID为6950的JVM进程的初始化Java堆大小

jinfo -flags 6950 打印VMID为6950的JVM进程的VM参数

jmap Java内存映像工具
jinjiprojectnaotu
例如,用jmap生成一个dump快照的命令为:

jmap -dump:format=b,file=dumpfile.bin 3500

jhat 启动web显示dump分析页面

jstack Java栈跟踪工具

jack -l 显示堆栈信息

hsdls jit生成代码反汇编

参考资料

本文参考:《深入理解Java虚拟机》

原文地址:https://www.cnblogs.com/MinnieChang/p/7296062.html