当前位置:首页 > 内存 > 正文

springboot低内存

  • 内存
  • 2024-08-24 05:47:33
  • 1421

一、为何内存不够用?微服务改造启动多个SpringBoot的陷阱与解决方案在生产环境中,我们遇到了内存使用过多的问题。本文将记录该问题的发生以及解决方案。
起初,系统运行顺利。随着业务量的增加,每个SpringBoot应用大约占用服务器64GB内存中的12GB。由于采用了微服务架构,问题逐渐显现出来。Java应用程序崩溃并且内存不足。其原因还需进一步探讨。
为了重现该问题,我模拟了生产环境。下面是内存使用情况截图:
经分析,Java应用的最大堆内存只有4GB,而生产环境的物理内存高达64GB。以下是Oracle官方对默认JVM参数的说明:
问题在于运维人员在发布Java应用程序时没有设置JVM参数,导致每个应用程序都使用最高的默认堆内存。这在生产环境中尤其重要,每个应用程序占用12GB内存,这对资源造成巨大压力。
对于内存占用过高的问题,一般的排查思路包括:
在生产环境中启动SpringBoot而不设置JVM参数可能会造成资源浪费、性能下降等危害。因此,强烈建议部署时根据应用特性和服务器配置适当调整JVM参数,以优化性能、保持系统稳定性、节省资源。


二、大家现在做web开发都是用spring_boot了吗,spring-Mvc也不用了?1、两者功能不一样,所以不存在冲突。MVC可以单独使用。它属于核心功能框架,而springboot则包装了springMVC,并包含了一些默认的springMVC配置,以简化新的应用程序。初始设置和开发过程
3.强烈推荐使用Springboot,但是需要学习和理解内部关系。


三、springboot1.5,2.1+jdk8,jdk11的内存占用对比学习和探索新技术是有趣且有趣的。
最近在关注jdk11,springboot最新版本2.1.1。接下来,准备升级您当前的学习项目。
那么为什么不使用jdk12而不是jdk11呢?我的决定很简单,因为jdk11是LTS版本。
升级之间应该是有区别的,所以只需更改项目的版本并比较内存消耗即可。
首先介绍一下我的项目:
springboot1.5.15+swagger+undertow+spring-orm4.3.3+jdk1.8
当前版本下面是内存消耗的截图:
启动时间:StartedJdyXcxApiin4.58秒(JVMrunningfor5.083)
内存情况:堆内存中初始内存堆大小为500M,使用了200M,超过了30所以我回收了
启动springboot升级:
springboot2.1.1+swagger+undertow+spring-orm5.1.4+jdk1.8
启动时间:StartedJdyXcxApiin3.967秒(JVMrunningfor4.832)
内存状态:堆内存初始内存堆大小为500M,已使用100M,超过250M则回收启动jdk升级:
springboot2.1.1+swagger+undertow+spring-orm5.1.4+jdk11
启动时间:StartedJdyXcxApiin3.825秒(JVMrunningfor4.581)
内存情况:堆内存初始内存堆大小为300M,超过M时使用78M。
包容。统计数据: