• JVM调试命令简介


    1.JPS(查JAVA进程)

    2.jinfo(查看正在运行java应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的JVM一些参数)

    大部分的运行期参数是无法修改的,能修改的只是个别,感觉意义不大,只是噱头。

    3.jmap(查看堆信息的工具,同时可以生成dump 文件)

    3.1>jmap -heap 8 打印heap的概要信息,GC使用的算法,heap(堆)的配置及JVM堆内存的使用情况。

    上面的异常,百度后发现原因:没有安装对应的openjdk-debuginfo工具。
    我这边环境不允许,就算了。直接拉网上的截图和对应的参数解析。

    出处:https://www.cnblogs.com/sxdcgaq8080/p/11089664.html


    参数解释:

    using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式
    
    using thread-local object allocation.   
    
    Concurrent Mark-Sweep GC   ##同步并行垃圾回收
    
     
    
    Heap Configuration:  ##堆配置情况,也就是JVM参数配置的结果[平常说的tomcat配置JVM参数,就是在配置这些]
    
       MinHeapFreeRatio = 40 ##最小堆使用比例
    
       MaxHeapFreeRatio = 70 ##最大堆可用比例
    
       MaxHeapSize      = 2147483648 (2048.0MB) ##最大堆空间大小
    
       NewSize          = 268435456 (256.0MB) ##新生代分配大小
    
       MaxNewSize       = 268435456 (256.0MB) ##最大可新生代分配大小
    
       OldSize          = 5439488 (5.1875MB) ##老年代大小
    
       NewRatio         = 2  ##新生代比例
    
       SurvivorRatio    = 8 ##新生代与suvivor的比例
    
       PermSize         = 134217728 (128.0MB) ##perm区 永久代大小
    
       MaxPermSize      = 134217728 (128.0MB) ##最大可分配perm区 也就是永久代大小
    
     
    
    Heap Usage: ##堆使用情况【堆内存实际的使用情况】
    
    New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸区Eden区 + 幸存区survior(1+2)空间)
    
       capacity = 241631232 (230.4375MB)  ##伊甸区容量
    
       used     = 77776272 (74.17323303222656MB) ##已经使用大小
    
       free     = 163854960 (156.26426696777344MB) ##剩余容量
    
       32.188004570534986% used ##使用比例
    
    Eden Space:  ##伊甸区
    
       capacity = 214827008 (204.875MB) ##伊甸区容量
    
       used     = 74442288 (70.99369812011719MB) ##伊甸区使用
    
       free     = 140384720 (133.8813018798828MB) ##伊甸区当前剩余容量
    
       34.65220164496263% used ##伊甸区使用情况
    
    From Space: ##survior1区
    
       capacity = 26804224 (25.5625MB) ##survior1区容量
    
       used     = 3333984 (3.179534912109375MB) ##surviror1区已使用情况
    
       free     = 23470240 (22.382965087890625MB) ##surviror1区剩余容量
    
       12.43827838477995% used ##survior1区使用比例
    
    To Space: ##survior2 区
    
       capacity = 26804224 (25.5625MB) ##survior2区容量
    
       used     = 0 (0.0MB) ##survior2区已使用情况
    
       free     = 26804224 (25.5625MB) ##survior2区剩余容量
    
       0.0% used ## survior2区使用比例
    
    PS Old  Generation: ##老年代使用情况
    
       capacity = 1879048192 (1792.0MB) ##老年代容量
    
       used     = 30847928 (29.41887664794922MB) ##老年代已使用容量
    
       free     = 1848200264 (1762.5811233520508MB) ##老年代剩余容量
    
       1.6416783843721663% used ##老年代使用比例
    
    Perm Generation: ##永久代使用情况
    
       capacity = 134217728 (128.0MB) ##perm区容量
    
       used     = 47303016 (45.111671447753906MB) ##perm区已使用容量
    
       free     = 86914712 (82.8883285522461MB) ##perm区剩余容量
    
       35.24349331855774% used ##perm区使用比例
    
    3.2>jmap -histo:live 8 打印当前堆中存活的对象及数量。

    普通情况,只要查看前十数据多的实例,就用head。

    说明:
    sort命令的部分参数含义解释如下
    -n :使用“”纯数字”进行排序(默认是以文字类型来排序)
    -r : 反向排序
    -k :以那个区间(field)来进行排序的意思

    3.3>jmap -dump:live,format=b,file=dump.txt 8 同样支持生成对应的dump文件。

    4.jstat(查看垃圾回收)

    此外,如果GC执行时间满足下列所有条件,就没有必要进行GC优化了:

    • Minor GC执行非常迅速(50ms以内)
    • Minor GC没有频繁执行(大约10s执行一次)
    • Full GC执行非常迅速(1s以内)
    • Full GC没有频繁执行(大约10min执行一次)

    具体可以参照:https://www.cnblogs.com/java-chen-hao/p/10656304.html

    5.jstack(查看Java堆栈信息)

    一般用在系统卡死,CPU彪升,崩溃的时候问题分析。

    jstack 8>stack.txt

    光肉眼分析不清楚的时候,这里有个小工具,https://fastthread.io,这个网站可以有个详细的图文分析,不过网速有点慢。

  • 相关阅读:
    【MyBatis】Inappropriate OGNL expression
    【java】前补零
    【js】前补零
    【Java】导出excel.xlsx
    【插件】fileinput
    【前端】WebSocket is already in CLOSING or CLOSED state?
    【HTML】input标签添加提示内容
    学习问题记录 -- 对象和引用
    八数码难题
    Java 逻辑运算符 & 与 &&的区别
  • 原文地址:https://www.cnblogs.com/zhou-yuan/p/14245503.html
Copyright © 2020-2023  润新知