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分析这个文件


               

  • 相关阅读:
    QLineEdit控件只能输入数字--QValidator结合正则
    谈 Linux,Windows 和 Mac (转自 王垠)
    看了王垠的文章《对Rust语言的分析》
    unsigned int 无符号整型的使用
    Qt布局Layout设置完全填充(设置Layout的Margin值)
    C#批量删除Mysql中相同前缀的表格
    libusb
    NPOI -- 读取excel表格中的时间格式
    spring项目启动执行
    kafka安全(一)SASL+ACL
  • 原文地址:https://www.cnblogs.com/chx9832/p/12410307.html
Copyright © 2011-2022 走看看