中泰证券现场--20220519问题排查

前言

自从中泰证券现场升级了04版本,发现了一个奇怪的现场,有一个服务运行一段时间,然后服务挂了,所有的接口访问都报404,刚发现每太注意,然后我直接就重新启动服务然后就可以使用了,但是后面又发现了这个问题,立即我发现这是一个严重的问题,可能是服务器内存不足或者是服务的jvm内存不足导致内存溢出问题。 说实话,以前没遇到这样的问题,于是我尝试的排查。

1、排查问题的过程

1、查看错误日志:tail -555f app_error.log

报了一个:**Failed to submit a listener notification task.Even loop shut down?**异常信息,百度了一下,有人说spring boot 在启动时,创建Bean时,调用了RedissonClient的shutdown方法,抛出的异常。并提出了redis版本3.9.0 - 3.9.1 均会出现这个问题。但是咱们服务器上面部署的redis版本是5.几 的版本。 2、接着查看这个服务是否是全挂了,还是只有某些接口下线了

lsof -i:服务的端口号(根据实际情况填写)
pwdx 进程号

发现这个服务的端口还有在监听,但是访问页面所有关于这个页面的接口都无法访问,报404找不到请求资源。但服务确实挂了。

3、搜索了一下日志:cat app_error.log|grep OutOf 可以发现日志中打印了很多内存溢出的信息,除此之外还看到生成了很多服务挂了的hprof文件和gc文件。 异常信息java.lang.OutOfMemoryError.GC overhead limit exceeded错误,是因为jvm花费了98%的时间进行垃圾回收,但是只释放了2%的内存,频繁的进行内存回收,jvm就会爆出这个错误。

4、查看了一下内存:free -h

好像这段时间系统的内存使用的确实有点多,第一个是服务器上的确是部署了很多服务,大概有28个服务左右。第二点是这个服务器的内存的确是有点小,在其他现场的生产环境都是至少64G内存的服务器。 5、通过分析gc文件: 4、查看了一下内存:free -h

可以看到在6点左右的时候,堆内存使用了很多,由此造成了内存溢出,由第一张图可以定位具体的报错位置,分析具体业务代码,是否在处理的时候将很多的数据都加载到内存里面导致了内存溢出问题。直接导致服务都蹦掉了。

end
  • 作者:旭仔(联系作者)
  • 发表时间:2022-05-20 20:40
  • 版权声明:自由转载-非商用-非衍生-保持署名
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论