• Java里有什么工具或者方法可以观测真实的内存使用情况?
  • 发布于 2个月前
  • 148 热度
    6 评论
生产如何观测 java 内存的真实使用情况, 比如其它的语言 go, C, python... 占用情况操作系统会真实反映出来, 但 java 的真实情况被一层虚拟机屏蔽了。比如有多个应用 -xms 16g -xmx 16g, 我要怎么知道哪些实际只需要 1g, 哪些需要更多呢, 尝试使用 jmx_exporter 内存趋势也看不出来什么, 有些看上去线性的涨到最高, 然后马上下降(可能是 GC?), 有些完全没规律。有什么技巧可以简单有效的观测真实内存?
用户评论
  • 肆意的青春
  • 你的目的是干啥呢?需要更加精细的管控内存?从你的描述来看,你希望优化一下目前的应用的 jvm 参数,调整到最优的状态?
  • 2024/9/22 22:50:00 [ 0 ] [ 0 ] 回复
  • 有种想念
  • python 也有虚拟机,也会占用更多内存但不使用,这点跟 java 是一样的,实际上额外占用内存是绝大部分内存管理系统的共同做法,哪怕你用 C 的 malloc ,也会出现实际占用内存大于需要的内存。内存管理系统要解决的问题就是快速分配内存的同时减少内存碎片,常见的实现方法中基本都有内存池的维护。
  • 2024/9/22 22:41:00 [ 0 ] [ 0 ] 回复
  • 受阻的自由
  • 实时预览工具 arthas
    springboot 项目 spring-boot-starter-actuator
    prometheus 有 jmx_exporter
    唉,论监控或者运维生态,有几个语言能和 java 比的
  • 2024/9/22 22:21:00 [ 0 ] [ 0 ] 回复
  • 温暖了冰
  • 真实使用的内存如果可以连接就用楼下的 jconsole 或 visualvm ,如果不行,就直接 dump 出来看,dump 出来的时候会强制 GC 一致,后面就是真实占用的内存了。但如果你只是想看整个应用使用的内存,直接看 Top 的 RES 就好了,当然,这里包含了堆外内存,你的意思是只看堆内内存就考虑用上面的方式。metrics 的话 spring actuator 里面有包含 jvm.used 类似的,可以参考下!
  • 2024/9/22 22:11:00 [ 0 ] [ 0 ] 回复