问题描述
简单记录一下JVM调优常用的一些命令。
一、JVM的结构
首先需要简单了解一下JVM的结构。
JVM(Java Virtual Machine)由多个组件组成,其中两个关键组件是堆和栈。
栈(Stack)是线程和方法执行的地方,主要耗费CPU资源
堆(Heap)堆存储着Java程序创建的对象,垃圾回收主要针对堆内存进行操作
二、常用的JVM调优命令
jps(JVM Process Status Tool)
列出正在运行的Java进程,显示Java进程的进程PID和主类名称
jps
jstat(JVM Statistics Monitoring Tool)
监视虚拟机各种运行状态信息,包括类加载、垃圾回收、内存使用等。例子如下
jstat -gc <pid> <interval> <count>
以一定的时间间隔和次数显示指定 Java 进程的垃圾回收统计信息。例如
jstat -gc 23456 1000 5
表示每 1000 毫秒(1 秒)显示一次进程 ID 为 23456 的 Java 进程的垃圾回收统计信息,共显示 5 次。
jinfo((Configuration Info for Java))
输出当前 jvm 进程的全部参数和系统属性,例子如下
jinfo 34567
可以显示进程PID为34567的Java进程的相关信息
jmap(Memory Map for Java)
生成Java进程的内存转存储文件(dump文件),或者查看堆内存的详细信息。
①生产dump文件例子如下
jmap -dump:format=b,file=dump.hprof 23456
生成进程 ID 为 23456 的名称为dump.hprof的堆转储文件。
②jmap还可以查看堆内存的详细信息,例子如下
jmap -heap <pid>
查看指定 Java 进程的堆内存使用情况,包括堆的大小、使用情况、垃圾回收器等信息。
jhat(JVM Heap Analysis)
分析堆转储文件(heapdump文件),
首先要通过jmap命令生成出堆转储文件。
jmap -dump:format=b,file=dump.hprof 23456
然后使用jhat命令分析
jhat dump.hprof
其中 “dump.hprof” 是堆转储文件的名称。jhat会解析该文件,并启动一个 HTTP 服务器,默认端口为 7000。查看分析结果:在浏览器中输入http://localhost:7000/,即可访问jhat提供的分析界面。可以查看堆中的对象、实例数量、引用关系等信息。
jstack(Stack Trace for Java)
生成虚拟机当前时刻的线程快照,用于分析线程的状态和死锁等问题。
jstack <pid>
生成指定 Java 进程的线程堆栈信息。