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

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

有什么技巧可以简单有效的观测真实内存需要, 麻烦分享下
举报· 119 次点击
登录 注册 站外分享
14 条回复  
liprais 小成 2024-9-22 12:56:57
看 gclog 就行
momocraft 小成 2024-9-22 13:03:01
开 gc log 然后面多加水
feimg99 小成 2024-9-22 15:31:28
jconsole or visualvm
Java 没落成这样子了吗?这俩内置工具都没人知道?
cxshun 小成 2024-9-22 15:40:14
真实使用的内存如果可以连接就用楼上的 jconsole 或 visualvm ,如果不行,就直接 dump 出来看,dump 出来的时候会强制 GC 一致,后面就是真实占用的内存了。

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

metrics 的话 spring actuator 里面有包含 jvm.used 类似的,可以参考下
Ayanokouji 小成 2024-9-22 15:40:18
实时预览工具 arthas
springboot 项目 spring-boot-starter-actuator
prometheus 有 jmx_exporter

唉,论监控或者运维生态,有几个语言能和 java 比的
vituralfuture 小成 2024-9-22 17:38:19
python 也有虚拟机,也会占用更多内存但不使用,这点跟 java 是一样的

实际上额外占用内存是绝大部分内存管理系统的共同做法,哪怕你用 C 的 malloc ,也会出现实际占用内存大于需要的内存

内存管理系统要解决的问题就是快速分配内存的同时减少内存碎片,常见的实现方法中基本都有内存池的维护
kandaakihito 小成 2024-9-22 18:16:18
准备一把十字螺丝刀,卸下底部所有螺丝即可取下 JVM 虚拟机的后盖,移开顶部的电池和排线就能看到内存了(逃
cvbnt 小成 2024-9-22 18:25:47
最便捷的还是 arthas
L0L 小成 2024-9-22 19:45:49
你的目的是干啥呢?需要更加精细的管控内存?从你的描述来看,你希望优化一下目前的应用的 jvm 参数,调整到最优的状态?
12下一页
返回顶部