zoukankan      html  css  js  c++  java
  • java定位系统性能问题

    分析工具和命令:

    工具:

      eclipse、sts 可以使用MAT(memory anylized tool)插件;

      idea 可使用JProfiler插件;

      也可以使用jdk自带的安装包目录下的C:Program FilesJavajdk1.8.0_161injvisualvm.exe 的工具来自行分析定位问题, jvisualvm工具只在JDK 6,JDK 7和JDK 8版本有提供,之后的版本就没再与JDK捆绑在一起了。

    命令:

      1.top命令:实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。top -Hp pid 可以查看线程的系统资源使用情况。

      2.vmstat命令:指定周期和采集次数的虚拟内存检测,可以统计内存,CPU,swap的使用情况,它还有一个重要的常用功能,用来观察进程的上下文切换。字段说明如下:

        

        r: 运行队列中进程数量(当数量大于CPU核数表示有阻塞的线程)
        b: 等待IO的进程数量
        swpd: 使用虚拟内存大小
        free: 空闲物理内存大小
        buff: 用作缓冲的内存大小(内存和硬盘的缓冲区)
        cache: 用作缓存的内存大小(CPU和内存之间的缓冲区)
        si: 每秒从交换区写到内存的大小,由磁盘调入内存
        so: 每秒写入交换区的内存大小,由内存调入磁盘
        bi: 每秒读取的块数
        bo: 每秒写入的块数
        in: 每秒中断数,包括时钟中断。
        cs: 每秒上下文切换数。
        us: 用户进程执行时间百分比(user time)
        sy: 内核系统进程执行时间百分比(system time)
        wa: IO等待时间百分比
        id: 空闲时间百分比

      3.pidstat命令:是 Sysstat 中的一个组件,也是一款功能强大的性能监测工具,需要安装,top 和 vmstat 两个命令都是监测进程的内存、CPU 以及 I/O 使用情况,而 pidstat 命令可以检测到线程级别的。pidstat命令线程切换字段说明如下:

        

        UID :被监控任务的真实用户ID。
        TGID :线程组ID。
        TID:线程ID。
        cswch/s:主动切换上下文次数,这里是因为资源阻塞而切换线程,比如锁等待等情况。
        nvcswch/s:被动切换上下文次数,这里指CPU调度切换了线程。

      4.jstack命令:是一种线程堆栈分析工具,最常用的功能就是使用 jstack pid 命令查看线程的堆栈信息,也经常用来排除死锁情况。

      5.jstat 命令:它可以检测Java程序运行的实时情况,包括堆内存信息和垃圾回收信息,我们常常用来查看程序垃圾回收情况。常用的命令是jstat -gc pid。信息字段说明如下:  

        

        S0C:年轻代中 To Survivor 的容量(单位 KB);
        S1C:年轻代中 From Survivor 的容量(单位 KB);
        S0U:年轻代中 To Survivor 目前已使用空间(单位 KB);
        S1U:年轻代中 From Survivor 目前已使用空间(单位 KB);
        EC:年轻代中 Eden 的容量(单位 KB);
        EU:年轻代中 Eden 目前已使用空间(单位 KB);
        OC:老年代的容量(单位 KB);
        OU:老年代目前已使用空间(单位 KB);
        MC:元空间的容量(单位 KB);
        MU:元空间目前已使用空间(单位 KB);
        YGC:从应用程序启动到采样时年轻代中 gc 次数;
        YGCT:从应用程序启动到采样时年轻代中 gc 所用时间 (s);
        FGC:从应用程序启动到采样时 老年代(Full Gc)gc 次数;
        FGCT:从应用程序启动到采样时 老年代代(Full Gc)gc 所用时间 (s);
        GCT:从应用程序启动到采样时 gc 用的总时间 (s)。

      6.jmap命令:查看堆内存的初始化信息以及堆内存的使用情况,还可以生成dump文件来进行详细分析。查看堆内存情况命令jmap -heap pid

    java程序性能问题主要有以下几种情况

    一、CPU占用率高

      原因:程序进入死循环,不断的计算当中

      

    二、内存泄漏

      原因:内存溢出最终导致内存泄漏

    三、死锁

    四、线程频繁切换

    参考:javaguide

  • 相关阅读:
    (全国多校重现赛一) H Numbers
    (全国多校重现赛一)E-FFF at Valentine
    (全国多校重现赛一)B-Ch's gifts
    (全国多校重现赛一)A-Big Binary Tree
    UVA-10391 Compoud Words
    HDU-1027Ignatius and princess II
    CodeForces-501B
    UVA-136Ugly numbers
    UVA-101
    UVA-10474
  • 原文地址:https://www.cnblogs.com/zyf-yxm/p/13590354.html
Copyright © 2011-2022 走看看