车辆批量离线问题排查

一、线上问题

        下班后的某天,本来正在激情Timi中,接到领导电话:我们的APP没有办法远控车辆啦,显示车辆不在线,看一下是什么问题导致的,抓紧恢复!只能对不起我的队友们了。

 二、问题排查

     这种大批量问题(大概5位数用户吧)车辆无法上线大概率就是网关服务问题,大概半年前刚入职遇到过一次排查后发现是某个数据服务(服务A)OOM了。此次盲猜大概也是同一个问题导致的,果然查看docker日志后发现和上次问题一致:

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "http-nio-33001-Acceptor-0"
Exception in thread "http-nio-33001-ClientPoller-1" java.lang.OutOfMemoryError: Java heap space
        at org.apache.tomcat.util.threads.TaskThreadFactory.newThread(TaskThreadFactory.java:48)
        at java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:619)
        at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:932)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1378)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:167)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:145)
        at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1028)
        at org.apache.tomcat.util.net.NioEndpoint$Poller.processKey(NioEndpoint.java:803)
        at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:779)
        at java.lang.Thread.run(Thread.java:748)

        首先重启镜像恢复服务,restart之后大概1分钟平台车辆在线数恢复往常正常水平。问题是解决了,但是要排查一下具体原因;

        根据服务OOM时间排查一下nginx日志,确认一下是否为人为某些操作导致(因为之前有注意到过有些页面数据量很大百万级别,但是有导出功能,近期也在安排其他同事做优化处理)

        进一步查看慢sql日志,发现这部分接口响应极慢,而且有export操作,根据nginx日志定位到相关接口(此处推荐插件RestfulToolkit-fix可以快速根据接口路由定位Controller代码位置),代码逻辑为简单的导出服务,没有任何大数据量导出的规避措施。查看数据库后发现这个表中的数据多达260w条……

        至此可以确定为超大数据量导出导致数据服务OOM,这个问题肯定是要处理但不是本文的核心内容。我要确认的是这一个提供数据库操作的服务挂掉了问什么会影响我的车辆上下线呢?查看网关日志发现网关接收到了车辆登入请求,但是车辆并没有成功上线:

        网关代码中发现每次处理车辆登入成功后会有一个检查ECU版本信息的请求,重点来了,网关(服务B)接收到车辆版本监测上报结果后会有一个info2Db(存储版本信息)的操作,而这个服务的提供者也就是我们OOM挂掉的数据库操作服务(Nacos + Fegin);

        此时可以确定问题为:网关服务在处理车辆登入请求后会发起检查版本信息请求,检查版本信息会用到服务A提供的数据库操作服务,而当服务A OOM崩溃后导致网关服务B线程阻塞无法正常处理车辆登入请求,从而引起车辆无法正常上线,用户无法远程控制。

问题总结:

  1. 数据服务A中由于操作大数据量导出导致服务A OOM;
  2. 网关服务B在调用服务A时,由于服务A OOM导致服务B线程阻塞而无法正常处理车辆登入请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值