JVM调优常用命令

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

这个命令会输出进程 10217MaxHeapSize(最大堆内存大小)标志的当前值。

  • 修改特定 JVM 标志的值

    请注意,不是所有的 JVM 标志都可以在运行时修改。而且,修改某些标志可能需要 JVM 重启。下面的命令尝试将最大堆内存大小设置为 2GB:

jinfo -flag MaxHeapSize=2g 10217
  • 查看所有 JVM 标志
jinfo -Flags 10217
  • 查看所有 Java 系统属性
jinfo -sysprops 10217

演示效果:

图片

jstack:打印JVM中线程快照

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值