1.现象
观察接口调用耗时,偶尔会出现一笔调用耗时相对较长:超过2s,且都是发送mq的耗时。或偶尔会出现sendKernelImpl exception的错误日志,但消息可以正常消费。
错误时截图
2.环境说明
rocketmq:4.4.0
java:1.8
rocketmq master主要配置:
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
3.初次问题排查
1)最开始怀疑发送mq代码问题,因为只有一个服务出现报错现象,其他服务只是偶尔超过2s。因为代码很少,配置也都一样,比较后排除此原因。
2)怀疑应用出现full gc。
幸好我们对应用配置了gc日志,查看出问题前后gc日志,确定没有出现full gc或youthgc,此原因也排除。
3)怀疑mq出现full gc
登录服务器,查看master、slave的gc日志,没有问题。此时陷入了迷茫……
4.查阅资料后再次排查问题
在网上搜索异常信息,网上说可能是linux虚拟内存问题,查看/var/log/message日志,发现不符。
继续查看告警时master的日志,发现store.log中有些不正常,截图如下:
master日志
继续查看slave的日志,似乎有些问题: