• JVM工具使用和Linux-top命令解析


    top 命令

    top 命令查看现在线程占用资料的情况。

    1297993-20191229164958154-320467418.png

    第三行,cpu状态信息,具体属性说明如下: us — 用户空间占用CPU的百分比。(重要) sy — 内核空间占用CPU的百分比。 ni — 改变过优先级的进程占用CPU的百分比 id — 空闲CPU百分比 wa — IO等待占用CPU的百分比 hi — 硬中断(Hardware IRQ)占用CPU的百分比 si — 软中断(Software Interrupts)占用CPU的百分比

    下面的表示各个线程占用资源的情况,

    PID         进程id
    USER        进程所有者
    PR          进程优先级
    NI          nice值。负值表示高优先级,正值表示低优先级
    VIRT        进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES         进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR         共享内存大小,单位kb
    S           进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU        上次更新到现在的CPU时间占用百分比
    %MEM        进程使用的物理内存百分比 (重要)
    TIME+       进程使用的CPU时间总计,单位1/100秒
    COMMAND     进程名称(命令名/命令行)
    
    

    比如我要查看 java 相关的所有线程占用情况

    top -H -p 24334 
    
    

    1297993-20191229175416147-1571300269.png

    使用 jstack 命令打印堆栈工具

    jstack是JDK内置的堆栈跟踪工具

     jstack 24334 > jstack.txt 
    
    

    (6902是Java进程的PID)打印出了Java进程的堆栈信息放到jstack.txt文件了;由于堆栈打印的线程的native id是十六机制的,所以,我把十进制的线程 24340转化成十六进制 5f14

    最后,通过

     cat jstack.txt  | grep -C 20 5f14 
    
    

    jstat 怼内存使用情况

    jstat是JDK内置的JVM检测统计工具,可以对** 堆内存的使用情况进行实时统计** 。

    1297993-20191229181452973-622647364.png

    上面数值的含义和JVM的参数一一对应

    E : Eden区
    O : Old区
    FGC  : Full GC 次数,例子中共 4 次
    FGCT : Full GC 的时间,例子共0.2秒左右 
    
    

    这个工具对于查内存泄漏非常有用。这里引用参考资料中的一个内存泄漏例子 :

    1297993-20191229182924379-285411205.png

    E(Eden区)跟O(Old区)的内存已经被耗尽了,FGC(Full GC)的次数高达6989次,FGCT(Full GC Time)的时间高达36453秒,即平均每次FGC的时间为:36453/6989 ≈ 5.21秒。也就是说,Java进程都把时间花在GC上了,所以就没有时间来处理其他事情。
    

    jmap 获取进程的内存映射信息

    假如真的出现了内存泄漏,那么一定要知道对应的代码在哪里才可以解决问题,就要使用 jmap 工具查出某个线程中内存个映射的对象是哪些。

    jmap -histo 24334|less
    
    

    其中 |less 表示打印的页数慢慢显示而不是一下子刷到最底下。

    实例的数量和字节数量,这样就可以进行分析了。

    jmap -histo 24334|less|grep sun
    
    

    其中|grep sun则是进行一个筛选,这个命令加在其他命令后面也一样,可以使用。

    参考资料

    https://blog.csdn.net/liubin1991liubin/article/details/79702640 https://segmentfault.com/q/1010000003586656

  • 相关阅读:
    jqeuery $.ajax 与后台jsone交互
    SpringMVC3.2+JPA使用注解的方式环境搭建
    SpringMVC+JPA使用注入的方式环境搭建
    EasyUI_tree根据数据库数据生成树形结构JSON格式
    ACM竞赛高手比其他程序员水平高很多吗?
    hdu 1028 Ignatius and the Princess III(DP)
    9513 防空洞
    hdu 1398 Square Coins(简单dp)
    FZU 1608 Huge Mission(线段树)
    poj2528 Mayor's posters(线段树之成段更新)
  • 原文地址:https://www.cnblogs.com/Benjious/p/12115950.html
Copyright © 2020-2023  润新知