rabbitmq异步任务未消费或者消费阻塞排查思路

1、问题现象

2021-11-30 12:00:00左右 4个消息任务一直卡在创建中

2、问题分析

2.1、日志分析

1个任务已消费,rpc 远程调用第三方服务上传8张图片素材后就holding住了;

3个任务无消费日志;

2.2、mq控制台消费分析

4个消息任务都处于unack状态,说明4个任务都已经路由到消费端,根据此可以排除mq服务端阻塞的原因。初步猜测是由于客户端消费阻塞问题,下面方向将是着重去分析应用服务消费端。

3.3、应用消费端消费分析

  1. 应用服务是双节点,根据日志分析出现问题的都是x.x.x.170节点,下面将着重分析170节点;
  2. 怀疑170节点服务会不会假死状态,让运维看了下服务的健康状态,并没有问题。
  3. 怀疑服务cpu负载和线程使用会不会存在满负荷,想通过普罗米修斯看下监控大盘,发现服务并未接入;(后续要计划接入)
  4. 由于看不了监控大盘,那就转而直接看jstack结果, 然后让运维jstack了170节点并导出到文件,来分析服务整个线程使用状态。从【图一】可以看出从2021-11-30 12:00:00左右执行上传图片素材的请求到2021-11-30 20:00:00 任然在运行中,从【图二】可以看出mq消费的线程一直处于waiting状态。到此处问题已经相对比较明了了,大概原因可以定位为由于上传图片素材到媒体渠道,在等待返回结果时由于和gateway的socket异常断连(并没有走到正常超时逻辑),而线程一直处于holding状态。

图一(请求facebook上传图片素材)

"thread-pool-2" #9901 prio=5 os_prio=0 cpu=516.49ms elapsed=434525.53s allocated=480M defined_classes=8 tid=0x00007fd4d416a000 nid=0x26bb runnable [0x00007fd466ef3000]

java.lang.Thread.State: RUNNABLE

at java.net.SocketInputStream.socketRead0(java.base@11.0.11/Native Method)

at java.net.SocketInputStream.socketRead(java.base@11.0.11/SocketInputStream.java:115)

at java.net.SocketInputStream.read(java.base@11.0.11/SocketInputStream.java:168)

at java.net.SocketInputStream.read(java.base@11.0.11/SocketInputStream.java:140)

at sun.security.ssl.SSLSocketInputRecord.read(java.base@11.0.11/SSLSocketInputRecord.java:478)

at sun.security.ssl.SSLSocketInputRecord.readHeader(java.base@11.0.11/SSLSocketInputRecord.java:472)

at sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(java.base@11.0.11/SSLSocketInputRecord.java:70)

at sun.security.ssl.SSLSocketImpl.readApplicationRecord(java.base@11.0.11/SSLSocketImpl.java:1364)

at sun.security.ssl.SSLSocketImpl$AppInputStream.read(java.base@11.0.11/SSLSocketImpl.java:973)

at java.io.BufferedInputStream.fill(java.base@11.0.11/BufferedInputStream.java:252)

at java.io.BufferedInputStream.read1(java.base@11.0.11/BufferedInputStream.java:292)

at java.io.BufferedInputStream.read(java.base@11.0.11/BufferedInputStream.java:351)

- locked <0x000000009b249738> (a java.io.BufferedInputStream)

at sun.net.www.http.HttpClient.parseHTTPHeader(java.base@11.0.11/HttpClient.java:754)

at sun.net.www.http.HttpClient.parseHTTP(java.base@11.0.11/HttpClient.java:689)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(java.base@11.0.11/HttpURLConnection.java:1615)

- locked <0x000000009b283d00> (a sun.net.www.protocol.https.DelegateHttpsURLConnection)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(java.base
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值