tomcat内存在系统中是如何显示的?

How is tomcat memory displayed by the system?

我在虚拟机上给 tomcat 了大约 3Gb 的 ram,它有大约 8GB, -Xms3072M -Xmx3072M -Xmn1024M.

在我启动 tomcat 并在终端中输入后

" ps -eo pmem,vsize,pid,cmd | sort -k 1 -nr | head -10"

我得到的第一个也是唯一一个 java 过程的答案是 19.4% (19.4 7052620 12748 /usr/bin/java...) 我的问题是这 19.4% 是多少 tomcat 没有堆的 ram 内存? 这是我在网上找到的等式:

最大内存 = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss] (https://plumbr.io/blog/memory-leaks/why-does-my-java-process-consume-more-memory-than-xmx)

因为8GB的19.4%是2GB,而我的堆是3GB。这是没有堆的ram内存吗?

你没有命名你的 OS,虽然很明显它是 *NIX 类型 OS。

ps 显示的内存是实际分配的内存。它将包括已分配给您的进程的所有 "native"、堆和 mmaped 内存。如果您的进程非常年轻(即还没有 运行 很长时间),那么它还不会使用太多的堆。

许多 OS,尤其是 Linux,将允许 malloc to return success,即使实际未分配物理内存。由于 JVM 在启动时立即分配您的 -Xms 设置,您可能希望进程的内存大小至少 3072MiB,但如果该内存实际上不是使用,则 ps 可能会显示比您预期的更小的尺寸。

如果您确实在使用 Linux,请查看 https://serverfault.com/questions/48582 并在网上搜索一下 Linux 内核如何分配内存。此外,如果您 正在 使用 Linux,请考虑将 linux 标签添加到您的问题中。

如果您使用Linux,您可能需要了解您的OS如何分配内存。如果您的 OS 使用 "overcommit" 策略,那么它的行为将如上所述。