Tomcat 内存消耗

Posted

技术标签:

【中文标题】Tomcat 内存消耗【英文标题】:Tomcat Memory Consumption 【发布时间】:2011-10-03 12:57:01 【问题描述】:

我将在 Linux 上安装 Tomcat,JVM 堆大小为 2048m(2GB) 到 2304m(2GB+256MB) 通过在cataina.sh file 中设置CATALINA_OPTS="-Xms2048m -Xmx2304m" Linux 操作系统有 8GB 的​​ RAM 所以我提出了一些观点,请帮助解决这个问题

tomcat 是否应该直接从操作系统消耗 2GB? 如果以上都没有,那需要多少钱? 如果tomcat占用的内存小于2GB,那么os为这个tomcat分配的这2GB内存只用于这个或者某些应用可以使用这个内存? 最后我们设置了这个最大和最小内存,意味着操作系统为tomcat分配了所有的内存?

【问题讨论】:

【参考方案1】:

JVM 将预先分配您为-Xms 指定的任何内存。因此,它将在启动时请求并分配 2GB 的内存。如果以后需要更多内存(最多-Xmx),JVM 会向操作系统请求更多内存。

但是,你知道你需要这么多内存吗?内存消耗的主要驱动力将是您的应用程序而不是 Tomcat。带有少量 servlet 或 JSP 的简单 Web 应用程序可以轻松地在不到 32MB 的堆中运行。您需要测量应用程序的性能/负载以确定最佳设置。

附注 - 设置 JVM 参数的首选方法是使用 setenv.sh 中的 JAVA_OPTS 设置,而不是 catalina.sh。

【讨论】:

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

以上是关于Tomcat 内存消耗的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 内存使用量在 IDLE 中增长

怎么查看GC 及jvm配置

Spring Boot 嵌入式 tomcat 服务器占用 800 MB 内存?

Tomcat优化

Spring启动嵌入式tomcat服务器占用800 MB RAM?

17 | Executor组件:Tomcat如何扩展Java线程池?