美文网首页
聊聊jvm的direct buffer统计

聊聊jvm的direct buffer统计

作者: go4it | 来源:发表于2024-01-06 00:03 被阅读0次

    本文主要研究一下jvm的direct buffer统计

    WechatIMG4.jpg WechatIMG3.jpg

    spring boot metrics

    jvm.memory.used

    {
        "name": "jvm.memory.used",
        "description": "The amount of used memory",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 137868592
            }
        ],
        "availableTags": [
            {
                "tag": "area",
                "values": [
                    "heap",
                    "nonheap"
                ]
            },
            {
                "tag": "id",
                "values": [
                    "Compressed Class Space",
                    "PS Survivor Space",
                    "PS Old Gen",
                    "Metaspace",
                    "PS Eden Space",
                    "Code Cache"
                ]
            }
        ]
    }
    

    jvm.memory.used包括heap和nonheap两大类

    heap

    http://localhost:8080/actuator/metrics/jvm.memory.used?tag=area:heap

    {
        "name": "jvm.memory.used",
        "description": "The amount of used memory",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 84724536
            }
        ],
        "availableTags": [
            {
                "tag": "id",
                "values": [
                    "PS Eden Space",
                    "PS Survivor Space",
                    "PS Old Gen"
                ]
            }
        ]
    }
    

    heap的话根据具体的垃圾收集器类型有不同的区分

    nonheap

    http://localhost:8080/actuator/metrics/jvm.memory.used?tag=area:nonheap

    {
        "name": "jvm.memory.used",
        "description": "The amount of used memory",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 54874872
            }
        ],
        "availableTags": [
            {
                "tag": "id",
                "values": [
                    "Metaspace",
                    "Compressed Class Space",
                    "Code Cache"
                ]
            }
        ]
    }
    

    nonheap这里包括3个,分别是Metaspace、Compressed Class Space、Code Cache

    jvm.buffer.memory.used

    http://localhost:8080/actuator/metrics/jvm.buffer.memory.used?tag=id:direct

    {
        "name": "jvm.buffer.memory.used",
        "description": "An estimate of the memory that the Java virtual machine is using for this buffer pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 81920
            }
        ],
        "availableTags": [
            {
                "tag": "id",
                "values": [
                    "direct",
                    "mapped"
                ]
            }
        ]
    }
    

    jvm.buffer.memory.used包含了direct、mapped两大类

    direct

    http://localhost:8080/actuator/metrics/jvm.buffer.memory.used?tag=id:direct

    {
        "name": "jvm.buffer.memory.used",
        "description": "An estimate of the memory that the Java virtual machine is using for this buffer pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 81920
            }
        ],
        "availableTags": []
    }
    

    mapped

    http://localhost:8080/actuator/metrics/jvm.buffer.memory.used?tag=id:mapped

    {
        "name": "jvm.buffer.memory.used",
        "description": "An estimate of the memory that the Java virtual machine is using for this buffer pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 0
            }
        ],
        "availableTags": []
    }
    

    jvm.buffer.count

    http://localhost:8080/actuator/metrics/jvm.buffer.count

    {
        "name": "jvm.buffer.count",
        "description": "An estimate of the number of buffers in the pool",
        "baseUnit": "buffers",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 10
            }
        ],
        "availableTags": [
            {
                "tag": "id",
                "values": [
                    "direct",
                    "mapped"
                ]
            }
        ]
    }
    

    jvm.buffer.count分direct和mapped两大类

    direct

    http://localhost:8080/actuator/metrics/jvm.buffer.count?tag=id:direct

    {
        "name": "jvm.buffer.count",
        "description": "An estimate of the number of buffers in the pool",
        "baseUnit": "buffers",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 10
            }
        ],
        "availableTags": []
    }
    

    mapped

    http://localhost:8080/actuator/metrics/jvm.buffer.count?tag=id:mapped

    {
        "name": "jvm.buffer.count",
        "description": "An estimate of the number of buffers in the pool",
        "baseUnit": "buffers",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 0
            }
        ],
        "availableTags": []
    }
    

    jvm.buffer.total.capacity

    http://localhost:8080/actuator/metrics/jvm.buffer.total.capacity

    {
        "name": "jvm.buffer.total.capacity",
        "description": "An estimate of the total capacity of the buffers in this pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 81920
            }
        ],
        "availableTags": [
            {
                "tag": "id",
                "values": [
                    "direct",
                    "mapped"
                ]
            }
        ]
    }
    

    jvm.buffer.total.capacity分direct和mapped两大类

    direct

    http://localhost:8080/actuator/metrics/jvm.buffer.total.capacity?tag=id:direct

    {
        "name": "jvm.buffer.total.capacity",
        "description": "An estimate of the total capacity of the buffers in this pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 81920
            }
        ],
        "availableTags": []
    }
    

    mapped

    http://localhost:8080/actuator/metrics/jvm.buffer.total.capacity?tag=id:mapped

    {
        "name": "jvm.buffer.total.capacity",
        "description": "An estimate of the total capacity of the buffers in this pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 0
            }
        ],
        "availableTags": []
    }
    

    Native Memory Tracking

    summary

    jcmd 6878 VM.native_memory summary scale=MB
    6878:
    
    Native Memory Tracking:
    
    Total: reserved=5625MB, committed=844MB
    -                 Java Heap (reserved=4096MB, committed=577MB)
                                (mmap: reserved=4096MB, committed=577MB)
    
    -                     Class (reserved=1066MB, committed=46MB)
                                (classes #7027)
                                (malloc=10MB #10535)
                                (mmap: reserved=1056MB, committed=37MB)
    
    -                    Thread (reserved=36MB, committed=36MB)
                                (thread #37)
                                (stack: reserved=36MB, committed=36MB)
    
    -                      Code (reserved=246MB, committed=15MB)
                                (malloc=2MB #3834)
                                (mmap: reserved=244MB, committed=12MB)
    
    -                        GC (reserved=160MB, committed=148MB)
                                (malloc=10MB #220)
                                (mmap: reserved=150MB, committed=138MB)
    
    -                  Internal (reserved=10MB, committed=10MB)
                                (malloc=10MB #10055)
    
    -                    Symbol (reserved=9MB, committed=9MB)
                                (malloc=8MB #74319)
                                (arena=2MB #1)
    
    -    Native Memory Tracking (reserved=2MB, committed=2MB)
                                (tracking overhead=2MB)
    

    其中Internal部分包含了jvm中使用的directBuffer的大小

    示例

        public void run(String... args) throws Exception {
            // 分配一个256MB的直接缓冲区
            ByteBuffer buffer = ByteBuffer.allocateDirect(256 * 1024 * 1024);
    
            // 填充数据
            Random random = new Random();
            while (buffer.remaining() >= 4) {
                buffer.putInt(random.nextInt());
            }
    
            System.out.println("Allocated direct buffer with capacity " + buffer.capacity());
        }
    

    VM.native_memory

    jcmd 8077 VM.native_memory summary scale=MB
    8077:
    
    Native Memory Tracking:
    
    Total: reserved=5881MB, committed=1099MB
    -                 Java Heap (reserved=4096MB, committed=576MB)
                                (mmap: reserved=4096MB, committed=576MB)
    
    -                     Class (reserved=1066MB, committed=46MB)
                                (classes #7028)
                                (malloc=10MB #10794)
                                (mmap: reserved=1056MB, committed=37MB)
    
    -                    Thread (reserved=36MB, committed=36MB)
                                (thread #37)
                                (stack: reserved=36MB, committed=36MB)
    
    -                      Code (reserved=246MB, committed=16MB)
                                (malloc=2MB #3889)
                                (mmap: reserved=244MB, committed=13MB)
    
    -                        GC (reserved=160MB, committed=148MB)
                                (malloc=10MB #220)
                                (mmap: reserved=150MB, committed=138MB)
    
    -                  Internal (reserved=266MB, committed=266MB)
                                (malloc=266MB #10055)
    
    -                    Symbol (reserved=9MB, committed=9MB)
                                (malloc=8MB #74324)
                                (arena=2MB #1)
    
    -    Native Memory Tracking (reserved=2MB, committed=2MB)
                                (tracking overhead=2MB)
    

    可以看到Internal部分由之前的10MB增大到了266MB

    jvm.buffer.memory.used

    http://localhost:8080/actuator/metrics/jvm.buffer.memory.used?tag=id:direct

    {
        "name": "jvm.buffer.memory.used",
        "description": "An estimate of the memory that the Java virtual machine is using for this buffer pool",
        "baseUnit": "bytes",
        "measurements": [
            {
                "statistic": "VALUE",
                "value": 268476416
            }
        ],
        "availableTags": []
    }
    

    可以看到jvm.buffer.memory.used的direct部分也变大了

    小结

    jvm的direct buffer可以通过springboot的jvm.buffer.memory.used?tag=id:direct来统计,也可以通过MNT的internal部分反应出来。

    doc

    相关文章

      网友评论

          本文标题:聊聊jvm的direct buffer统计

          本文链接:https://www.haomeiwen.com/subject/mytwndtx.html