记一次线上应用故障分析

这几天某个应用经常报上下线告警。我们是通过监测应用节点是否从zk临时节点掉下来进行告警的。排除网络原因的话,以往一般是服务器或应用cpu太高,zk客户端与zk服务端连接超时,而且重试后也无法连上导致。日志体现如下:

查看堆内存使用曲线发现,内存持续上升到最大内存,然后gc。gc时经常会出现应用上下线的报警。
在这里插入图片描述
把堆内存dump下来,使用mat分析,发现一个服务的现场队列,占了大部分内存。
这里差不多就知道,应该是消费速度小于生产速度,导致消息堆积了。
在这里插入图片描述
在这里插入图片描述

其中一个埋点服务,请求数据量比较大。看了代码,他原先的方式是,接收到请求后,使用一个固定15的线程池进行处理,处理逻辑就是往kafka里pub消息。显然消息是处理不过来的,导致对应的线程池队列增长,直到内存耗尽。gc时还会导致cpu升高,影响其他应用的调用。

优化方式:
通过队列缓存消息,通过定时和超过指定大小两种方式结合,消费队列消息,另外发送kafka可以采取批量发送的方式。可以提高应用相应速度,提高应用性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值