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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring启动嵌入式tomcat服务器占用800 MB RAM?相关的知识,希望对你有一定的参考价值。

我正在使用一个使用嵌入式tomcat服务器的Spring Boot应用程序。应用程序需要800 MB以上的RAM。那是常见的吗?有没有什么方法可以降低内存使用率?

答案

tomcat消耗的内存量完全取决于您的应用程序要求。您需要对应用程序进行某种内存分析。

那是常见的吗?

是的,我可以。这完全取决于您的应用程序,创建对象的方式以及对象使用的内存量。

您可以从将-Xms置于1GB并运行应用程序并执行正常操作开始。使用JVisualVmJConsole等工具来观察堆大小和GC性能,以及JVM中不同类型对象消耗的内存量。

这将使您初步了解应用程序所需的堆数量。在此之后使用JMeter这样的工具来加载测试应用程序,检查负载是如何阻碍堆使用的。

推荐读物:http://blog.manupk.com/2012/09/java-memory-model-simplified.html

另一答案

这很常见。 Java VM非常繁重。查看JVM启动标志,它将告诉你堆大小可以增长到什么(你可能会看到像-Xmx768m那样分配最多768M的堆)。您可以尝试设置CATALINA_OPTS环境变量:CATALINA_OPTS=-Xmx512m,但是如果引导VM的springboot脚本覆盖了此属性,则必须跟踪脚本中设置的值。但是,默认值通常很有效,并且如果您开始实例化需要一段时间进行垃圾回收的许多或大型(读取:hibernate)对象,则会阻止JVM丢失内存错误。

另一答案

有没有什么方法可以降低内存使用率?

有两种方法:

  • 您可以尝试“挤压”堆大小。这是不推荐的,因为它导致JVM在GC中占用更大比例的CPU,更频繁的GC暂停,最终是OOME。 这种方法通常根本不起作用;即它只会导致应用程序更快死亡。
  • 您可以找出应用程序使用如此多内存的原因。这可能是由于很多事情: 问题可能太大了。 您的应用程序可能会因各种不必要的库,功能等而“膨胀”。 您的内存数据结构可能设计不当。 您的应用程序可能在内存中缓存太多。 您的应用程序可能有内存泄漏。

我同意@ cowbert的建议。使用性能监视工具尝试跟踪使用大多数JVM内存的内容。如果存在内存泄漏,这通常会显示为用于某些类型对象的意外大量内存。

以上是关于Spring启动嵌入式tomcat服务器占用800 MB RAM?的主要内容,如果未能解决你的问题,请参考以下文章

无法启动 bean 'webServerStartStop';无法启动嵌入式 Tomcat 服务器 - spring-boot-starter-web

Spring Boot postgresql嵌入式tomcat启动失败

将 Spring Boot 战争部署到 Tomcat 服务器并收到“无法启动嵌入式 Tomcat org.springframework.context.ApplicationContextExcep

使用嵌入式 Tomcat 启动 Spring Boot 应用程序时如何配置堆大小?

使用 Spring Boot 和嵌入式 Tomcat 启用会话持久性

Spring Boot如何启动嵌入式Tomcat?