记一次springboot服务凌晨无故宕机问题的解决
作者:蜡笔小兴灬 发布时间:2023-07-25 04:50:23
表述
在一次服务更新后发现每天凌晨0点3秒服务准时挂,开始的时候认为是maven依赖中存在system.exit(3)类似这样的代码,但是我想了下这个代码很多客户都有用到但是只有这一个客户出现了问题,而且另外一个服务没有更新在此前几个月都是没问题的 这几天也是一样无故挂了。
环境
windows服务器
排查
1、初步怀疑是内存泄漏问题,在启动脚本中加入 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump.log,第二天起来一看还是挂了没有出现dump日志说明不是内存泄漏
2、白天几千几万的请求量都没有挂,凌晨时候星星两两的请求量甚至没有请求却挂了
3、服务准时0点3秒挂,后续我写了个脚本加入执行计划每日凌晨1点检查服务并启动,发现有写脚本的服务还是0点3秒挂而另外一个服务变成1点10几分左右挂了
4、有怀疑可能是logback的问题,日志生成规则是按日期备份的,可是每个客户都是这样的配置就这个客户有问题所以暂时排除这个可能了
临时解决
1、暂时给几个服务的启动脚本加入到执行计划中每日凌晨检查并启动,没有找到好的解决方案也不知道是什么问题,希望知道的大佬告知一下感激不尽。
附上执行计划检查脚本
@echo off
echo 正在检测启动服务…请不要关闭该窗口
D:
cd “D:\写上服务的目录”
:ks
set num=0
for /f %%i in (‘netstat -ano^| find “:服务的端口”') do set /a num=%num%+1
echo %num%
if %num% == 0 (
echo “开始启动服务”
call D:\aaa.bat
) else (
echo “无需启动服务”
)
其中D:\aaa.bat 是服务的启动脚本 这里也可以直接写上java -jar springboot服务.jar类似这样的代码
最终解决
经昨晚12点时候录屏服务器后看后终于找到了问题所在,控制台没有丝毫的报错信息直接程序崩溃,这就是windows服务器的不足之处,如果此时服务器是Linux的话 会在项目目录底下记录崩溃的Jvm日志。思考之后发现果真竟然是logback的锅,找到原因:
1、因为logback配置中没有加入maxFileSize的配置,导致日志文件大小有几个G
2、服务器本身性能配置一般
3、logback采用的是zip压缩按日备份的
4、压缩文件是很耗CPU的,文件越大CPU占用越多,如果文件很大就会导致压缩到一半程序崩溃,这里就是出现了这种情况导致压缩到一半没成功,tmp临时文件也没有被删除
5、没有出现该问题的几个客户是因为日志文件都没有达到这种级别的量,其次其他几个客户的服务器性能都是很OK的
解决方法就是在加入maxFileSize配置 建议值是128M。值越大对服务器的性能要求就越高,我这边因为服务器性能一般保险起见设置128M
补充知识:Springboot启动即挂掉问题
提示说明端口8080被占用
将端口改为其他端口号即可
来源:https://blog.csdn.net/qq_33812847/article/details/101693489


猜你喜欢
- 前言附加属性是说一个属性本来不属于某个对象,但由于某种需求而被后来附加上,也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性,附加
- 在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递。数据的格式通常有2种:1、xml;
- 1、cmd指令,进入.svn目录,找到wc.db文件 sqlite 3 打开2、 对 svn源代码目录 右键, clean up, 稍等1至
- AutoCompleteTextView是实现动态匹配输入内容的一种输入框(EditText),如输入“and”时,会提示“Android”
- 很多方法请看官网地址:hutool官网地址脚本之家下载:https://www.jb51.net/softs/549331.html简介Hu
- 一、静态代理模式1.1、 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标
- Android短信高效备份这篇文章,承接上一篇。使用高效的方式备份短信——xml序列化器。存储短信,要以对象的方式存储。首先创建javabe
- 折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。A 搜素过程从数组的中间元素开始,如果中间元素正好是要查
- MD5加密MD5是由MD2、MD3、MD4演变过来的,虽然MD5加密算法现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还
- 1、HashMap HashMap继承抽象类AbstractMap,实现接口Map、Cloneable, Serializable接口。Ha
- 前言Java 中常规的集合工具,相比大家都熟练于胸,但是如果说有一个集合类你不一定知道或者说肯定没用过,你相不相信呢?今天跟大家介绍的就是&
- 项目演示演示中只用一个用户登录,只是为了测试功能,实际使用中是根据数据库表内数据来决定的。1 创建工程完成配置1 ieda新建maven项目
- 前言Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient。WebClie
- 使用注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置。使用注解,可以在大多数情况下避免使用
- 前言今天分享一个类似“孔雀开屏”的动画效果,打开新的页面时,新的页面从屏幕右上角以圆形逐渐打开到全屏。先来看下具体的效果不知道这种效果大家叫
- 1 前言Stream 是 java8 中处理集合的抽象概念,可以执行非常复杂的查询、过滤和映射数据等操作。Stream API 提供了一种高
- 本文实例为大家分享了java日期时间基本操作方法,供大家参考,具体内容如下1. 获得Calendar实例:Calendar c = Cale
- 学会了Paint,Canvas的基本用法之后,我们就可以动手开始实践了,先写个简单的图片加载进度条看看。按照惯例,先看效果图,再决定要不要往
- 1. 公共字段自动填充1.1 问题分析在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工时需要设置修改时间、修改人等字
- idea spring Initializr创建项目勾选项目所需要的依赖pom.xml文件会加载勾选的依赖,也可以不勾选后面通过自己常用的p