• jvm工具-jps、jstat、jmap、jstack


    一、jps

    jps -v 【输出进程启动参数

    1. [root@VM-8-2-centos ~]# jps -v
    2. 12401 Jps -Dapplication.home=/usr/local/jdk1.8.0_241 -Xms8m
    3. 16964 jar

    其他参考

    Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客

    二、jstat

    jstat -gc 【vmid】 【查看Java堆的状态】

    1. [root@VM-8-2-centos dian-xhf]# jstat -gc 16964
    2. S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
    3. 12288.0 8192.0 0.0 0.0 147968.0 26136.3 55808.0 25116.2 59136.0 56068.7 7680.0 7058.2 15 0.223 3 0.341 0.564

    jstat -gcutil 【vmid】 【查看Java堆占用百分比】

    1. [root@VM-8-2-centos dian-xhf]# jstat -gcutil 16964
    2. S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
    3. 0.00 0.00 17.66 45.00 94.81 91.90 15 0.223 3 0.341 0.564

    S0 幸存0区域
    S1 幸存1区域
    E 伊甸园区
    O 老年区
    M 元空间 【有可能是P,表示永久代。具体的和jdk版本有关,笔者jdk版本是8】
    YGC 年轻代的GC,也就是Minor GC ,轻量GC ,次数15
    YGCT 轻量GC所耗时间 0.223秒
    FGC 重量级GC次数 3
    FGCT 重量级GC所耗时间 0.341秒
    GCT 所有GC所耗费时间 0.564秒

    三、jmap 

    jmap -heap pid

    打印 Java 堆概要信息,包括使用的 GC 算法、堆配置参数和各代中堆内存使用情况;

    1. > jmap -heap 10352
    2. jmap -heap 10352
    3. Attaching to process ID 10352, please wait...
    4. Debugger attached successfully.
    5. Server compiler detected.
    6. JVM version is 25.201-b09
    7. using thread-local object allocation.
    8. Parallel GC with 4 thread(s)
    9. Heap Configuration:
    10. //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(defalut 40)
    11. MinHeapFreeRatio = 0
    12. //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
    13. MaxHeapFreeRatio = 100
    14. //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
    15. MaxHeapSize = 4280287232 (4082.0MB)
    16. //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
    17. NewSize = 89128960 (85.0MB)
    18. //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
    19. MaxNewSize = 1426587648 (1360.5MB)
    20. //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老年代’的大小
    21. OldSize = 179306496 (171.0MB)
    22. //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
    23. NewRatio = 2
    24. //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
    25. SurvivorRatio = 8
    26. //对应jvm启动参数-XX:MetaspaceSize=<value>:设置JVM堆的‘元空间’的初始大小
    27. // jdk1.8 永久代已经被元空间所取代
    28. MetaspaceSize = 21807104 (20.796875MB)
    29. CompressedClassSpaceSize = 1073741824 (1024.0MB)
    30. //对应jvm启动参数-XX:MaxMetaspaceSize= :设置JVM堆的‘元空间’的最大大小
    31. MaxMetaspaceSize = 17592186044415 MB
    32. G1HeapRegionSize = 0 (0.0MB)
    33. //堆内存分布
    34. Heap Usage:
    35. //新生代的内存分布
    36. PS Young Generation
    37. //Eden区内存分布
    38. Eden Space:
    39. //Eden区总容量
    40. capacity = 1425539072 (1359.5MB)
    41. //Eden区已使用
    42. used = 28510792 (27.19001007080078MB)
    43. //Eden区剩余容量
    44. free = 1397028280 (1332.3099899291992MB)
    45. //Eden区使用比率
    46. 2.0000007407724003% used
    47. From Space:
    48. capacity = 524288 (0.5MB)
    49. used = 65536 (0.0625MB)
    50. free = 458752 (0.4375MB)
    51. 12.5% used
    52. To Space:
    53. capacity = 524288 (0.5MB)
    54. used = 0 (0.0MB)
    55. free = 524288 (0.5MB)
    56. 0.0% used
    57. PS Old Generation
    58. capacity = 128974848 (123.0MB)
    59. used = 24006808 (22.894676208496094MB)
    60. free = 104968040 (100.1053237915039MB)
    61. 18.613557893086256% used
    62. 13410 interned Strings occupying 1194568 bytes.

    jmap -histo pid

    打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;

    1. >jmap -histo 10352
    2. num #instances #bytes class name
    3. ----------------------------------------------
    4. 1: 27073797 433180752 java.lang.Integer
    5. 2: 5442 16503144 [I
    6. 3: 5005 6143944 [B
    7. 4: 33835 3446608 [C
    8. 5: 9721 855448 java.lang.reflect.Method
    9. 6: 33751 810024 java.lang.String
    10. 7: 6494 717416 java.lang.Class
    11. 8: 14303 457696 java.util.concurrent.ConcurrentHashMap$Node
    12. ...

    jmap -histo:live pid

    打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;统计 heap 中所有生存的对象的情况, 这个命令会先触发 gc 再统计:

    1. > jmap -histo:live 10352
    2. num #instances #bytes class name
    3. ----------------------------------------------
    4. 1: 27483 2670608 [C
    5. 2: 6453 713152 java.lang.Class
    6. 3: 27300 655200 java.lang.String
    7. 4: 12861 411552 java.util.concurrent.ConcurrentHashMap$Node
    8. 5: 6364 327688 [Ljava.lang.Object;
    9. 6: 2496 219648 java.lang.reflect.Method
    10. 7: 874 178440 [B
    11. ...

    jmap -dump:live,format=b,file=a.log pid

    以 hprof 二进制格式将 Java 堆信息输出到文件内,该文件可以用 JProfiler、VisualVM 或 jhat 等工具查看;

    JDK 常用工具 —— jmap 详解-CSDN博客

    四、jstack

    jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。

    Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客

    分析工具jprofiler 

  • 相关阅读:
    zookeeper入门篇之分布式锁
    给docker容器中的mysql做定时数据备份
    数据库——索引
    前端三刺客----HTML
    关于在搭建微服务项目中使用openfeign作为rpc框架调用时,枚举对象无法进行转换问题
    浅谈与 DBA 息息相关的 Database Plus 理念
    电脑提示d3dx9_43.dll丢失怎么解决,分享6种有效的解决方法
    土巴兔面试题
    TikTok快速起号技巧(下篇)
    基于hexo框架快速从0到1搭建个人博客----文章写作(四)
  • 原文地址:https://blog.csdn.net/startyangu/article/details/139726576