机器配置:2c4g
从 ecs 机器监控上看到内存占用最近几个星期缓慢增长到了差不多 70% 左右,打了 dump, 文件大概是 200m 不到,Java 应用重启后监控看到内存掉到了 40%
命令行参数如下: -Xms2048M -Xmx2048M -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/logs/ -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:MaxTenuringThreshold=12 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/path/logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=512k -Djava.library.path=/path/bin
想问下大概会是哪些原因呢?
感谢。
1
weiweiwitch 2022-12-06 11:44:49 +08:00 1
Java 的 Xmx 只是设定 Java 堆内存的上限。但堆外,包括代码区,线程,GC ,直接内存等等,还会占用很多内存。所以你看到的占用了 70%是正常的。据说(我还没在生产环境遇到),使用 G1 收集器,极限情况下整个进程的内存占用会达到 Xmx 的 2 倍。
所以,如果你的 Xmx 是 2G ,那么安全期间,你的机器的内存需要 4G 以上。 |
2
weiweiwitch 2022-12-06 11:45:52 +08:00
https://blog.csdn.net/w1014074794/article/details/113340344
这篇文章会帮你理解一些内存上的东西。 |
3
shanghai1943 OP @weiweiwitch #2 感谢。我先学习下。
|