jps:查看正在运行的java进程
通过jps命令获取Java进程的进程ID一级主类名称或者JAR文件的完成路径名
参数选项:
-l
:输出主类或者JAR的完全路径名。例如,运行jps -l
命令将列出所有Java进程及其对应的主类名称或JAR文件的完整路径名。-v
:输出JVM参数。列出每个Java进程的JVM参数信息。-m
:输出JVM启动时传递给main()方法的参数。-V
:(特定环境或版本可能支持)提供特定于该环境或版本的输出或功能。<hostid>
:指定要查询 Java 进程信息的远程主机
jstat:查看JVM统计信息
jstat是java虚拟机(JVM)自带的监控工具,用于查看HotSpot JVM的性能统计信息
参数选项:
基础参数:
-t
:展示从虚拟机运行到现在的性能数据-h<lines>
:每隔lines行展示行头部信息<vmid>
:JVM进程的虚拟机标识符。<interval>
:两次统计信息收集之间的时间间隔(秒)。<count>
:收集统计信息的次数。
性能参数:
-class
:显示类加载器的统计信息。-compiler
:显示即时编译器的统计信息。-gc
:显示垃圾收集的统计信息。-gccapacity
:显示各内存池的容量和使用情况。-gccause
:显示上一次或当前垃圾收集的原因及相关统计信息。-gcnew
:显示新生代的垃圾收集统计信息。-gcnewcapacity
:显示新生代内存池的容量和使用情况。-gcold
:显示老年代的垃圾收集统计信息。-gcoldcapacity
:显示老年代内存池的容量和使用情况。-gcpermcapacity
:显示永久代的容量和使用情况(Java 8 及以后版本可能不再适用)。-printcompilation
:输出被即时编译器编译的方法信息。
通过jstat工具监控指定Java进程(进程ID为10217)的垃圾收集(GC)统计信息,并限制输出结果的行数为2行。每1秒收集一次数据,总共收集3次。
[root@localhost ~]# jstat -gc -h 2 10217 1s 3
结果演示:
jmap:导出内存映像文件&内存使用情况
jmap用于生成堆内存映射或堆转储文件,用于后续的堆分析,帮助开发者诊断内存泄漏和内存溢出等问题
jmap [option] <pid>
其中,<pid>
是要分析的 Java 进程的进程 ID。
参数选项:
-heap
:打印出堆内存的概要信息,包括各代(新生代、老年代)的使用情况、GC 配置等。-histo
:打印堆内存的直方图,列出每个类的实例数量和总字节大小。帮助识别哪些类占用了大量内存。-dump:<dump-options>
:生成堆转储文件。<dump-options>
可以是live
(仅转储活动的对象)、format=b
(二进制格式)、file=<filename>
(指定转储文件的名称)。
例如,要生成一个名为 heapdump.hprof
的堆转储文件,可以使用以下命令:
jmap -dump:format=b,file=heapdump.hprof <pid>
-finalizerinfo
:打印出正在等待 Finalizer 线程执行的对象信息。-clstats
:打印类加载器的统计信息,包括加载的类数量、卸载的类数量等。-printcompilation
:打印出即时编译器编译的代码信息。
注意: 生成堆转储文件可能会对正在运行的 JVM 产生性能影响,特别是在堆内存很大的情况下。因此,建议在系统负载较低或处于可接受的范围内时执行此操作。
jinfo:实时查看和修改jvm配置参数
jinfo
用于实时查看和修改运行中的 Java 进程的 JVM 配置参数。
jinfo [option] <pid>
参数选项:
-flag <name>
打印指定名称的 VM 标志的值-flag [+|-]<name>
启用或禁用指定名称的 VM 标志-flag <name>=<value>
将指定名称的 VM 标志设置为给定值-Flags
打印 VM 标志-sysprops
打印 Java 系统属性<no option>
同时打印以上两者-h
或-help
打印此帮助信息
注意:
jinfo
在 Java 9 及更高版本中才支持参数动态修改,并且并非所有 VM 标志都支持动态修改。修改某些标志可能需要 JVM 重启才能生效。
测试用例:
例如:查看这个进程的 JVM 标志和系统属性,例如:修改其中一个标志(比如 -Xmx
,即最大堆内存大小)的值。
- 查看所有 JVM 标志和系统属性
jinfo 10217
- 查看特定 JVM 标志的值
jinfo -flag MaxHeapSize 10217
这个命令会输出进程 10217
的 MaxHeapSize
(最大堆内存大小)标志的当前值。
-
修改特定 JVM 标志的值
请注意,不是所有的 JVM 标志都可以在运行时修改。而且,修改某些标志可能需要 JVM 重启。下面的命令尝试将最大堆内存大小设置为 2GB:
jinfo -flag MaxHeapSize=2g 10217
- 查看所有 JVM 标志
jinfo -Flags 10217
- 查看所有 Java 系统属性
jinfo -sysprops 10217
演示效果:
jstack:打印JVM中线程快照