nsqd read i/o timeout & PostgreSQL执行超时问题排查

记最近遇到的问题及排查解决思路。

简单说下业务模型,消费者消费nsq队列中的数据,然后存入postgresql数据库。数据执行插入操作,同时触发某个字段计算更新,在更新过程中调用了查询函数。

在查postgresql中数据时发现有大量数据丢失,看服务生产者消费者都正常运行,下面开始一步步排查。

登录nsqdadmin页面管理工具,查看连接消费情况。此时发现有30多万数据积压,首先怀疑是不是消费者数量不够导致的,此时不要着急增加消费者,去看看连接情况。发现连接超时严重,而且最长的连接坚持不到10分钟就挂了再自动重连,这个过程中,消费的数量也很少,可能这才是导致积压的根本原因。

去捞nsqd的日志,发现大量超时ERROR(此处真实IP端口已替换)

ERROR: client(ip:port) - failed to read command - read tcp ip:4150->ip:port: i/o timeout

这也就说明消费者连接都是正常的,只是读取过程中出现了超时,去查下消费者时间记录。

单条数据插入的时长居然将近20秒,那问题肯定出在数据库这里了。

DB语句执行较慢,主要的原因大致可分为

  1. 语句本身性能较差导致,通常表现局部请求缓慢,极端情况下也会引发资源瓶颈导致全局性能问题;
  2. 语句本身性能没问题,但受资
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值