V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
plko345
V2EX  ›  程序员

请教 Java 程序如何观测真实的内存使用情况

  •  
  •   plko345 · 4 小时 18 分钟前 · 570 次点击

    生产如何观测 java 内存的真实使用情况, 比如其它的语言 go, C, python... 占用情况操作系统会真实反映出来, 但 java 的真实情况被一层虚拟机屏蔽了

    比如有多个应用 -xms 16g -xmx 16g, 我要怎么知道哪些实际只需要 1g, 哪些需要更多呢, 尝试使用 jmx_exporter 内存趋势也看不出来什么, 有些看上去线性的涨到最高, 然后马上下降(可能是 GC?), 有些完全没规律.

    有什么技巧可以简单有效的观测真实内存需要, 麻烦分享下

    6 条回复    2024-09-22 15:40:18 +08:00
    liprais
        1
    liprais  
       3 小时 46 分钟前 via iPhone
    看 gclog 就行
    momocraft
        2
    momocraft  
       3 小时 40 分钟前
    开 gc log 然后面多加水
    plko345
        3
    plko345  
    OP
       3 小时 22 分钟前
    @liprais
    @momocraft
    有现成的作为 metric 导出的工具吗, 要监控和查看趋势的吧
    feimg99
        4
    feimg99  
       1 小时 12 分钟前
    jconsole or visualvm
    Java 没落成这样子了吗?这俩内置工具都没人知道?
    cxshun
        5
    cxshun  
       1 小时 3 分钟前
    真实使用的内存如果可以连接就用楼上的 jconsole 或 visualvm ,如果不行,就直接 dump 出来看,dump 出来的时候会强制 GC 一致,后面就是真实占用的内存了。

    但如果你只是想看整个应用使用的内存,直接看 Top 的 RES 就好了,当然,这里包含了堆外内存,你的意思是只看堆内内存就考虑用上面的方式。

    metrics 的话 spring actuator 里面有包含 jvm.used 类似的,可以参考下
    Ayanokouji
        6
    Ayanokouji  
       1 小时 3 分钟前
    实时预览工具 arthas
    springboot 项目 spring-boot-starter-actuator
    prometheus 有 jmx_exporter

    唉,论监控或者运维生态,有几个语言能和 java 比的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:43 · PVG 16:43 · LAX 01:43 · JFK 04:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.