zoukankan      html  css  js  c++  java
  • jvm 占用高的问题定位

    定位流程

    先使用一些轻便的工具查看总体情况, 如果情况糟糕, 再使用重量级的工具

    jstack       查看线程数是否过多

    jstat -gc -gcutil 查看gc次数和时间是否过多, 各个分区中堆的实际大小。

          FULL gc过多会造成STOP WORLD, 应用响应停顿。 考虑使用其他垃圾收集方式, CMS G1 ...

    jmap -histo 显示各个类的个数和占用内存大小,查看是否的确占用很大===> 如果确实很大, 可能需要-dump堆; 如果不大,可能不是堆内存的问题

        -histo:live会触发GC。 如果线上应用压力不大,可以使用;压力大时,考虑停用服务后再分析,慎用

    jmap -dump:format=b,file=./xxx.dmp  注意file后面的存放路径。

             命令执行不了, 可能是docker启动时没有设置ptrace=0, 也可能是用户不对, 也可能是file后面的存储路径没有权限

    tar –czf xxx.tar.gz xxx.dmp  压缩dump文件

    docker cp 将dmp copy到本地,使用eclipse MAT进行分析==> cpu 线程个数 锁 对象引用关系

     命令解释:

    jstat -options列出所有可选flag

    -gc     显示内存中各个区的容量和实际占用大小

    -gcutil 显示所有的内存统计百分比

    其他选项

    -class
    -compiler 
    -gccapacity
    -gccause
    -gcmetacapacity
    -gcnew
    -gcnewcapacity
    -gcold
    -gcoldcapacity 
    -printcompilation

    参考: https://blog.csdn.net/zhaozheng7758/article/details/8623549

    https://lotabout.me/2018/QQA-Understanding-jstat-gc-output/

    jmap

    -heap to print java heap summary
    -histo[:live]   
    -dump:<dump-options>   

    其他选项

    -clstats to print class loader statistics

    -finalizerinfo

      

  • 相关阅读:
    Python--学习过程
    线程、进程、协程
    socket
    面向对象--进阶
    面向对象--初级
    Python常用的模块
    2019-2020-1 20191301《信息安全专业导论》第十二周学习总结
    wirehark
    2019--2020第十一周信息安全导论论总结20191301
    2019--2020信息安全导论第10周总结20191301
  • 原文地址:https://www.cnblogs.com/yszzu/p/9330498.html
Copyright © 2011-2022 走看看