我遇到了服务器物理内存不足的问题,我无法辨别它是来自我的应用程序的 Java 进程还是服务器上的其他进程。让我们假设以下场景:
服务器物理内存:3747MB
Java -Xms64m
Java -Xmx512m
Java XX:MaxPermSize=512m
当我启动服务器时,操作系统 (RHEL) 使用您最喜欢的内存报告工具(top, cat /proc/meminfo | grep Mem, free -m等)报告正在使用 487MB 。当我启动我的 Java 进程(pid 123)时,它使用了大约 215MB 的物理内存(如 RES 内存报告的那样ps -f -p 123),使我使用的总内存高达 700MB 左右。
如果我让它运行一整天,我的进程的 RES 内存会稍微波动,但通常是一致的。然而,服务器总内存稳步增加约 1500MB,达到 2200MB。
如果我的 java 堆大小或 perm gen 堆在增长,它不会反映在进程的 RES 内存中吗?
此外,我似乎无法在任何地方考虑额外的 1500MB。
# ps aux | awk '{ RES+=$6 } END { printf("RES: %.2fMB\n", RES/1024) }'
RES: 722.23MB
Run Code Online (Sandbox Code Playgroud)
谁能帮我找回丢失的记忆?我基本上是想弄清楚这是我的应用程序问题,还是基础架构团队的服务器构建问题。