Tomcat 的内存消耗

4
我将在Linux上安装Tomcat,并将JVM堆大小设置为2048m(2GB)到2304m(2GB + 256MB),方法是在cataina.sh文件中设置CATALINA_OPTS =“-Xms2048m -Xmx2304m”,并且Linux操作系统具有8GB的RAM,所以我需要澄清以下几点:
  • Tomcat是否应该直接从操作系统占用2GB内存?
  • 如果以上答案是否定的,那么它应该占用多少内存?
  • 如果Tomcat占用的内存小于2GB,则操作系统分配给Tomcat的2GB内存只能用于此Tomcat还是其他应用程序也可以使用此内存?
  • 最后,我们设置了最大和最小内存,这意味着操作系统会为Tomcat分配所有内存吗?
1个回答

8
JVM将预先分配您为-Xms指定的任何内存。因此,它将在启动时请求和分配2GB的内存。如果稍后需要更多内存(最多达到-Xmx),JVM将从操作系统请求更多内存。
但是,您知道需要这么多内存吗?内存消耗的主要驱动程序将是您的应用程序,而不是Tomcat。具有少量servlet或JSP的简单Web应用程序可以轻松运行在小于32MB的堆中。您需要测量您的应用程序以确定最佳设置。
一个副笔 - 设置JVM参数的首选方法是使用setenv.sh中的JAVA_OPTS设置,而不是catalina.sh。

感谢您的回复。昨天我使用上述设置部署了Tomcat,发现Tomcat仅占用了200MB-300MB的内存,而不是2GB的内存。因此,我应该得出结论,2GB是保留内存而非已分配内存。请帮忙解决这个问题。 - ajduke
我认为JVM可能没有捕捉到您的-Xms / -Xmx设置。尝试将它们移动到setenv.sh中的JAVA_OPTS。 - AngerClown
没有JVM获取路径参数,我通过jvisualvm进行了检查。从jvisualvm中可以看到它占用了2GB的内存,但是操作系统只显示200MB-300MB。 - ajduke
我使用 -Xms 1024M 启动了一个 JVM,然后在 top 命令中看到 VIRT=1104m 和 RES=168m。因此,这个进程似乎请求了全部虚拟内存,但实际上并没有触及所有内存以使操作系统物理分配它。 - AngerClown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接