前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot_jar包Linux环境下部署启动报错OutOfMemoryError排查解决

springboot_jar包Linux环境下部署启动报错OutOfMemoryError排查解决

作者头像
Java架构师必看
发布2021-03-22 11:48:47
1.8K0
发布2021-03-22 11:48:47
举报
文章被收录于专栏:Java架构师必看
问题描述:

springboot打包成jar包部署到linux服务器,部署报错如下所示:

在这里插入图片描述
在这里插入图片描述
问题排查:
  • 排查一 分析:idea启动正常,本地jar包启动也正常,初步断定可能是JVM初始化内存不足导致的内存溢出。 1) free -m
在这里插入图片描述
在这里插入图片描述

发现free空闲空间只有349M,可交换空间137M。 2)top

在这里插入图片描述
在这里插入图片描述
  • VIRT:virtual memory usage 虚拟内存。假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量。
  • RES:resident memory usage 常驻内存。进程当前使用的内存大小,但不包括swap out,包含其他进程的共享 ,如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反,关于库占用内存的情况,它只统计加载的库文件所占内存大小。
  • SHR:shared memory 共享内存。除了自身进程的共享内存,也包括其他进程的共享内存,虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小,计算某个进程所占的物理内存大小公式:RES – SHR ,swap out后,它将会降下来。

推测:idea启动正常,本地jar启动也正常,服务器空闲内存空间过小,初步推测可能由于内存过小的原因。

验证: 1)部署另外一台内存空间较大的服务器,启动测试,java -jar test.jar 启动正常无问题。 2)java -Xms1024m -Xmx1024m -jar app.jar & 设置jvm参数 建议初始化堆的大小和最大堆的大小设置一致,减少GC。

排查二 分析:将内存溢出问题稍微放下,看上面的抛出异常的地方。推测可能跟注入的依赖有关联。据网上资料尝试下面的解决方法: 将maven中mysql-connector-java的版本指定为5.1.42.

代码语言:javascript
复制
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.42</version>
</dependency>

SpringBoot的Maven依赖中不需要自己添加版本号,这是因为SpringBoot的父项目的父项目已经帮我们配置好了。 如何查看默认的版本号?在pom.xml里找到spring-boot-starter-parent,按CTRL加鼠标左键进入其父项目

在这里插入图片描述
在这里插入图片描述

可以在父项目文件找到这个配置,按相同的方式查看。

在这里插入图片描述
在这里插入图片描述

后我们可以看到一大串的版本号:

在这里插入图片描述
在这里插入图片描述

分别找下hibernate和mysql连接驱动的默认版本号:

在这里插入图片描述
在这里插入图片描述

这个错误产生的原因是mysql驱动的版本太高,hibernate版本兼容性问题。重新打包部署,未解决,排除此种可能。

排查三 分析通过比较之前的jar包后发现,jar包大小变为98M,之前48M,增加了两倍,后对比发现,resoureces下面放了sql大文件,打包时一起打包进去了,删除后打包测试,正常。

推测:打包的大小导致了内存空间小时启动异常。

结论:

1)服务器内存空间太小导致 2)jar包打包没排除不需要的大文件,导致启动时所占内存空间过大所导致

本文由来源 jackaroo2020,由 javajgs_com 整理编辑,其版权均为 jackaroo2020 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述:
  • 问题排查:
  • 结论:
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档