zoukankan      html  css  js  c++  java
  • 监控JVM内存使用情况

    1.使用jstat命令查看堆内存的使用情况
                    jstat 命令选项 vmid 间隔时间 查询次数
                    
                    1.查看当前进程Class类加载的统计
                        jstat -class *****


                    
                    2.查看编译统计
                        jstat -compiler *****


                    
                    3.查看垃圾回收统计
                        jstat -gc *****


                         S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
          13312.0 13312.0  0.0    0.0   81920.0   7537.3   217088.0    4546.5   18944.0 18467.5 2304.0 2182.4      7    0.055   6      0.151    0.206
                        
                        s0c: 第一个Survivor区域大小
                        S1C:第二个Survivor区域的大小
                        S0U:第一个Survivor区域使用的大小
                        S1U:第二个Survivor区域使用的大小
                        EC:Eden区域的大小
                        EU:Eden区域的使用大小
                        OC:Old区的大小
                        OU:Old区使用的大小
                        MC:方法区大小
                        YGC:年轻代垃圾回收次数,YGCT: 使用时间
                        FGC:年老代垃圾回收次数,FGCT: 使用时间

          可追加间隔时间和打印次数

           jstat -gc ***** 1000 5  代表间隔一秒打印五次


                
                2.通过jmap监控内存使用情况
                    2.1 监控堆内存:jmap -heap *****


                    2.2 监控内存中对象的数量及其大小:
                        查看所有对象的数量以及大小包括类型:jmap -histo ***** | more  (| more代表分页)

          


                        查看活跃对象的数量以及大小包括类型:jmap -histo:live ***** | more
                    


                    2.3 通过jmap导出堆内存使用情况的文件,方便查看
                       jmap -dump:format=b,file=E:Y2学习JVM导出dump.dat 30052

        

         


                    
                    
                    2.4 通过jhat查看dump文件并且进行分析,启动一个HTTP端口进行访问,通过该端口可以查看到整个应用程序所使用的的所有对象的情况,提供OQL进行检索
                        jhat -port 8081 E:Y2学习JVM导出dump.dat

        

         

        

         底部有查询工具

        

         

         


                
                3.MAT分析工具,在工具中可以查看到对象数量以及内存使用的情况,当然可以分析出可能出现问题
                    如果问题是正常情况,可以加大内存,如果是非正常情况,手动解决代码问题
                

        选择要分析的文件

     

     

    查看数量及占用大小等

     

     首行空出是搜索功能,根据正则搜索,例输入 java 回车搜索

     

        


                4.模拟内存溢出:

                    public static void main(String[] args) {
                        List<Object> objList=new ArrayList<>();
                        for (int i=0;i<10000000;i++){
                            String str="";
                            for(int j=0;j<1000;j++){
                                str+= UUID.randomUUID().toString();
                            }
                            objList.add(str);
                        }
                        System.out.println("添加数据成功~");
                    }


                    参数设置:-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError,初识空间和最大空间都给成8m,如果报错就生成报错文件

    这样启动运行必然会内存溢出

     

     找到项目的目录,找到报错文件

    再用mat分析这个文件


               

  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/chx9832/p/12410307.html
Copyright © 2011-2022 走看看