SpringBoot项目启动内存泄漏问题排查与解决

server/2024/10/19 6:18:15/

在今天的开发过程中,我遇到了一个SpringBoot项目启动时显示内存泄漏的问题。这个问题让我头疼了一段时间,但经过多次排查,最终成功解决了。现在我将这个过程分享给大家,希望能对遇到类似问题的朋友们有所帮助。

问题现象

在启动SpringBoot项目时,控制台突然出现大量内存泄漏的警告信息,项目无法正常启动。具体警告信息如下:

The web application [ROOT] appears to have started a thread named [lettuce-nioEventLoop-16-1] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:

问题排查

  1. 首先,我检查了项目代码,确保没有内存泄漏的代码块。然而,经过检查,代码并无异常。
  2. 接着,我使用工具查看项目启动过程中的内存使用情况。监控显示,项目在启动过程中,内存确实在不断上升,但并没有异常。因此,我排除了项目代码导致的内存泄漏问题。

  3. 由于项目部署在Linux服务器上,我决定检查服务器磁盘内存使用情况。使用df -sh命令发现,服务器磁盘内存不足,磁盘占比已经到了99%。
  4. 在删除了一些日志文件后,磁盘占比仍然高达89%,这让我意识到问题可能不在日志文件上。
  5. 为了进一步确认是哪个用户或目录占用了大量磁盘空间,我使用了du -sh命令查看当前用户占用磁盘的大小。
  6. 为了定位具体是哪个文件夹占用了大量磁盘空间,我使用了du -sh *命令查看到当前目录下的文件夹分别的占比。发现一个名为backup的目录占用了大量磁盘空间。
  7. 经过进一步排查,发现原来该应用在项目更新时,上一个版本的jar会备份到backup目录下面。随着项目多次更新,这些备份文件逐渐累积,导致磁盘内存大量被占用。

问题解决

  1. 删除了部分无用的文件,释放了磁盘空间。
  2. 重新启动SpringBoot项目,项目正常启动,内存泄漏问题解决。

总结

在排查SpringBoot项目启动内存泄漏问题时,不仅要关注项目本身的内存设置和代码问题,还要关注服务器硬件资源的使用情况。通过df -shdu -shdu -sh *等命令,可以有效地帮助我们定位磁盘空间不足的问题。在解决问题时,要综合考虑各种因素,确保项目能够稳定运行。

希望我的经验能对大家有所帮助,如有疑问,欢迎在评论区留言讨论。


http://www.ppmy.cn/server/25890.html

相关文章

巅峰之战·成长之美丨 纷享销客中南战区伙伴同行者大会圆满成功

近日,为期2天的纷享销客中南战区伙伴同行者大会在北京成功举行,从全国各地奔赴而来的渠道伙伴共襄盛举。大会以”巅峰之战成长之美“为主题,共同探讨”双向奔赴 、健康经营、赢盈共进“的发展之道。 一、数智赋能,任重道远 纷享销…

Ubuntu 18.04 安装 CMake Ceres-Solver 记录

1. 安装 CMake-3.22.1 不可卸载原有版本 CMake(防止 ROS 出现问题),只需建立软链接即可 1. 源码下载并解压wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz tar -xvzf cmake-3.22.1.tar.gz2. 移动到合适目录sudo mv cmake-3.22.1 /u…

区块链技术下的DApp与电商:融合创新,开启商业新纪元

区块链技术的蓬勃发展正引领着一种新型应用程序的崛起——去中心化应用程序(DApp)。DApp并非传统的中心化应用,它构建于去中心化网络之上,融合了智能合约与前端用户界面,为用户提供了全新的交互体验。智能合约&#xf…

安卓手机APP开发_媒体开发部分__保持设备处于唤醒状态

安卓手机APP开发_媒体开发部分__保持设备处于唤醒状态 目录 概述 使用唤醒锁的用法 保持屏幕在亮着 电视的环境模式 保持CPU处于运行状态 概述 为了避免多消耗电池电量,安卓设备会很快进入休眠状态.然而,也是需要保持它一直 处于唤醒的状态,来完成某些工作. 你使用的方…

ArrayList.remove()方法盲区

1、错误用法 1.1、for循环中使用remove(int index),列表从前往后遍历 如果在for循环中调用了多次ArrayList.remove(),那代码执行结果是不准确的,因为每次每次调用remove函数,ArrayList列表都会改变数组长度,被移除元素…

抽象工厂模式(Redis 集群升级)

目录 定义 Redis 集群升级 模拟单机服务 RedisUtils 模拟集群 EGM 模拟集群 IIR 定义使⽤接⼝ 实现调⽤代码 代码实现 定义适配接⼝ 实现集群使⽤服务 EGMCacheAdapter IIRCacheAdapter 定义抽象⼯程代理类和实现 JDKProxy JDKInvocationHandler 测试验证 定义 …

令牌技术详解

1. 问题引出 之前我们讲 Cookie 和 Session 时提到过一个用户登录的场景:当用户登录时,服务器端可以把用户的登录信息存在Session中 并返回给客户端对应的SessionID,客户端会把这个SessionID存在Cookie 中当下次访问该服务器时,…

linus下Anaconda创建虚拟环境pytorch

一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…