关于JVM调优的工具及JVM 常见调优参数

六个命令行排查工具

我们一般使用 JDK 自带的 6 个命令行工具来排查JVM。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可以使用命令行工具直接运行。

jps(虚拟机进程状况工具)

jps(JVM Process Status tool,虚拟机进程状况工具),用于列出正在运行的 JVM 的 LVMID(Local Virtual Machine IDentifier,本地虚拟机唯一 ID),以及 JVM 的执行主类、JVM 启动参数等信息。语法如下:

jps [options] [hostid]

常用的 options 选项:

-l:用于输出运行主类的全名,如果是 jar 包,则输出 jar 包的路径;
-q:用于输出 LVMID(Local Virtual Machine Identifier,虚拟机唯一 ID);
-m:用于输出虚拟机启动时传递给主类 main() 方法的参数;
-v:用于输出启动时的 JVM 参数。

jstat(虚拟机统计信息监视工具)

jstat(JVM Statistics Monitoring Tool,虚拟机统计信息监视工具)用于监控虚拟机的运行状态信息。

查询后的参数说明:

参数 说明
S0C 年轻代中第一个存活区的大小
S1C 年轻代中第二个存活区的大小
S0U 年轻代中第一个存活区已使用的空间(字节)
S1U 年轻代中第二个存活区已使用的空间(字节)
EC Edem 区大小
EU 年轻代中 Edem 区已使用的空间(字节)
OC 老年代大小
OU 老年代已使用的空间(字节)
YGC 从应用程序启动到采样时 young gc 的次数
YGCT 从应用程序启动到采样时 young gc 的所用的时间(s)
FGC 从应用程序启动到采样时 full gc 的次数
FGCT 从应用程序启动到采样时 full gc 的所用的时间
GCT 从应用程序启动到采样时整个 gc 所用的时间

jstat 常用的查询参数有:

-class,查询类加载器信息;
-compiler,JIT 相关信息;
-gc,GC 堆状态;
-gcnew,新生代统计信息;
-gcutil,GC 堆统计汇总信息。

jinfo(查询虚拟机参数配置工具)

jinfo(Configuration Info for Java)用于查看和调整虚拟机各项参数。语法如下:

jinfo <option> <pid>

jmap(堆快照生成工具)

jmap(Memory Map for Java)用于查询堆的快照信息。

jhat(堆快照分析功能)

jhat(JVM Heap Analysis Tool,堆快照分析工具)和 jmap 搭配使用,用于启动一个 web 站点来分析 jmap 生成的快照文件。

jstack(查询虚拟机当前的线程快照信息)

jstack(Stack Trace for Java)用于查看当前虚拟机的线程快照,用它可以排查线程的执行状况,例如排查死锁、死循环等问题。

两个可视化排查工具

JConsole 和 JVisualVM 都位于 JDK 的 bin 目录下,JConsole(Java Monitoring and Management Console)是最早期的视图调试工具。

用 JConsole 可以监控线程、CPU、类、堆以及 VM 的相关信息,同样我们可以通过线程这一页的信息,发现之前我们故意写的死锁问题。

JVisualVM 既可以调试本地也可以调试远程服务器

JVM 调优

JVM 调优主要是根据实际的硬件配置信息重新设置 JVM 参数来进行调优的。

JVM 常见调优参数包含以下这些:

-Xmx,设置最大堆内存大小;
-Xms,设置初始堆内存大小;
-XX:MaxNewSize,设置新生代的最大内存;
-XX:MaxTenuringThreshold,设置新生代对象经过一定的次数晋升到老生代;
-XX:PretrnureSizeThreshold,设置大对象的值,超过这个值的对象会直接进入老生代;
-XX:NewRatio,设置分代垃圾回收器新生代和老生代内存占比;
-XX:SurvivorRatio,设置新生代 Eden、Form Survivor、To Survivor 占比。

你可能感兴趣的:(JVM)