记⼀次springboot服务凌晨⽆故宕机问题的解决
表述
在⼀次服务更新后发现每天凌晨0点3秒服务准时挂,开始的时候认为是maven依赖中存在it(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类似这样的代码
最终解决
spring boot是啥经昨晚12点时候录屏服务器后看后终于到了问题所在,控制台没有丝毫的报错信息直接程序崩溃,这就是windows服务器的不⾜之处,如果此时服务器是Linux的话会在项⽬⽬录底下记录崩溃的Jvm⽇志。思考之后发现果真竟然是logback的锅,到原因:
1、因为logback配置中没有加⼊maxFileSize的配置,导致⽇志⽂件⼤⼩有⼏个G
2、服务器本⾝性能配置⼀般
3、logback采⽤的是zip压缩按⽇备份的
4、压缩⽂件是很耗CPU的,⽂件越⼤CPU占⽤越多,如果⽂件很⼤就会导致压缩到⼀半程序崩溃,这⾥就是出现了这种情况导致压缩到⼀半没成功,tmp临时⽂件也没有被删除
5、没有出现该问题的⼏个客户是因为⽇志⽂件都没有达到这种级别的量,其次其他⼏个客户的服务器性能都是很OK的
解决⽅法就是在加⼊maxFileSize配置建议值是128M。值越⼤对服务器的性能要求就越⾼,我这边因为服务器性能⼀般保险起见设置128M
补充知识:Springboot启动即挂掉问题
提⽰说明端⼝8080被占⽤
将端⼝改为其他端⼝号即可
以上这篇记⼀次springboot服务凌晨⽆故宕机问题的解决就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论