开发中优化时常用的JDK命令

工作中优化时常用的一些命令,死记肯定是记不住的,通常记在小本本上,用到的时候,复制粘贴出来查看 作者:沉默的反补 https://www.bilibili.com/read/cv6295754 出处:bilibili

jmap(堆内存分析)

一定要注意,触发Full GC不触发Full GC的情况,因为我们必须要通过控制变量法,对照地来实验结果。当堆异常时,想要获得快照,如此时使用GC后快照,则必然会破坏当前的堆样本。因此,我们针对堆 heap 的分析,必定是需要2份以上快照,1份是有问题的 heap dump,通常是异常下未GC的情况;另一份是项目启动后输出,或GC后输出的比较正常的 heap dump。(推而广之,其他语言,其他工具也是一个道理。)

  • jmap pid

    会打印目标虚拟机中加载的每个共享对象起始地址、映射大小以及共享对象文件路径全称;

  • jmap -heap pid

    显示 Java 堆详细信息,包括堆配置、内存使用情况;

  • jmap -histo pid

    显示堆中对象的统计信息,不触发GC;

  • jmap -histo:live pid

    显示堆中对象的统计信息,触发Full GC;

  • jmap -clstats

    打印类加载器的信息,版本需大于JDK8;

  • jmap -dump:format=b,file=/dump.phrof pid

    生成转储存快照 dump 文件(最为常用)!

jstack(栈分析)

  • jstack -l pid >/var/thread.txt

    获取 Thread dump,并输出到 /var/thread.txt 文件

jps(显进程信息)

  • jps

    显示Java进程的ID 和 类的名称(快速查看当前进程,有时可以替代 ps -ef|grep xxx )

  • jps -l

    显示Java进程的ID 和 主函数的完全限定名

  • jps -v

    显示Java进程ID 和 类的名称, 以及传递给JVM的启动参数等

jstat(查看GC相关信息)

  • jstat -class pid

    显示加载 class 的数量,以及空间占用等信息;

  • jstat -gc pid

    显示GC相关的堆信息,查看GC的次数,及时间;

  • jstat -gcutil pid

    详细显示GC相关的堆信息,查看GC的次数,及时间(非常实用);

jstatd(JVM监控)

  • 启动 JVM 监控服务。它是一个基于 rmi 的应用,向远程机器提供本机 JVM 应用程序的信息,默认端口1099(注意查看并修改一下内容)。
    image

ok!

jinfo( 动态 JVM 参数控制)

  • jinfo -flag SurvivorRatio pid

    查看指定 pid 对应的 JVM 的 SurvivorRatio 参数;

  • jinfo -flag SurvivorRatio=80 pid

    动态修改其 SurvivorRatio 参数的值

jhat(分析 heapdump 文件)

  • jhat -J-Xmx2048M heap.phrof

    可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言(当然,能拿到 dump 文件,还是推荐拿到本地使用工具来查看,而不是在服务器上直接查看)。

-J 后可以跟 JVM 的参数;

javah(生成c\c++头文件)

  • 直接 cd 到当前程序的 target/class 目录下(maven项目,如果是普通项目则到bin目录下)然后使用:javah com.hongwen.HelloWorld

  • 其中 javah 后面的是需要生成头文件类的完全限定名(包名+类名),当然生成的 .h 文件位于当前 class 的目录下;

    直接使用如下命令:javah -classpath D:\QulityBg\SpringMVCTest\target\classes  com.hongwen.HelloWorld
    -classpath
    后跟绝对路径,该位置只写到 class 路径或者 bin 路径,后面是需要生成头文件类的完全限定名;

javap(反编译 class 文件)

该命令获取到的是 JVM 指令集,使用编译器反编译看到的 .java文件并不是直接使用 javap 获取到的。

  • javap file

    反编译 Class,直接输出指令集。

  • javap  -l   file

    会输出行号和本地变量表信息。

  • javap -v file

    不仅会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息。

  • javap -c file

    会对当前class字节码进行反编译生成汇编代码。 作者:沉默的反补 https://www.bilibili.com/read/cv6295754 出处:bilibili

posted @ 2021-06-20 15:36  hochan_100  阅读(14)  评论(0编辑  收藏  举报