部署spring boot失误导致Linux内存被占满

在Linux环境下重复部署两个Spring Boot应用后,8G内存被占用97%。通过查看Java进程,发现有六个进程,而应只有两个。经排查确定进程来源,筛选出无效进程,取交集确定需kill的进程解决问题。原因是应用启动遇问题未挂掉且不占端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

  • Linux环境下部署两个spring boot应用,部署—>测试—>重新部署这样的过程重复N次。最后完成时发现8G内存被占用97%,一定出问题。

问题排查

  • spring boot 既然是Java应用,那就查看有关Java进程都占用了多少多少内存。命令: ps -aux | grep java。结果如下图:在这里插入图片描述
  • 看到结果已经大概猜出导致内存被占满的原因。只部署了两个应用,应该是开启两个进程,而上图有六个进程。

解决问题

  • 为保证如上的进程都是来自同一应用(把服务器的其他应用进程kill掉就大事不好了),使用命令:
 cd /proc/33061       # 数字为pid
 ll					  # 打完上一行命令再打这个
  • 解释上面的命令:由于linux在启动一个进程时,会在/proc下创建一个以PID命名的文件夹,该进程的信息存在该文件夹下。在该文件夹下有一个名为exe的文件,该文件指向了具体的命令文件,所以可以通过ls -l或者ll命令根据ps或top查到的PID查找命令的绝对路径。结果如下:
    在这里插入图片描述
  • 通过如上方式排查,可以确定这六个进程都是出自我要部署的两个应用。那么进行进一步筛选,筛选出哪些进程是无效进程。命令:
netstat -lanp | grep java

结果:
在这里插入图片描述

  • 如上图所示,没有端口的进程则是无效的,得出筛选结果。然后把本次筛选结果与第一次筛选结果取交集可得出有哪些进程是我们需要kill的。到此,问题解决。

问题发生原因

  • 问题解决后,细细回想部署中的一些操作。总结原因如下:
    • spring boot 启动的过程中遇到某些问题没有成功启动,但是进程没有因此挂掉,反而继续存活,此时又不会占用任何端口。

以上就是问题发生的原因和解决过程,万万不可粗心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值