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

4 小时 10 分钟前
 plko345

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

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

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

551 次点击
所在节点    程序员
6 条回复
liprais
3 小时 38 分钟前
看 gclog 就行
momocraft
3 小时 32 分钟前
开 gc log 然后面多加水
plko345
3 小时 14 分钟前
@liprais
@momocraft
有现成的作为 metric 导出的工具吗, 要监控和查看趋势的吧
feimg99
1 小时 4 分钟前
jconsole or visualvm
Java 没落成这样子了吗?这俩内置工具都没人知道?
cxshun
55 分钟前
真实使用的内存如果可以连接就用楼上的 jconsole 或 visualvm ,如果不行,就直接 dump 出来看,dump 出来的时候会强制 GC 一致,后面就是真实占用的内存了。

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

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

唉,论监控或者运维生态,有几个语言能和 java 比的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1074784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX