记录一次死锁导致生产问题

某物流服务平台遭遇生产环境登录模块故障,经排查发现是由于数据库连接池配置错误,仅8个连接可用。在并发量大时,因system模块内存缓存失效,导致权限获取过程中产生死锁。最终解决方案是调整数据库连接数并重启服务,以避免类似问题的发生。
摘要由CSDN通过智能技术生成

问题产生

在某日下午临近5点,客户群突然反馈所负责项目的生产环境无法登录,遂导致后续工作无法继续。

某物流服务平台,包含船货代、箱管、仓储等等功能。

问题定位

在问题暴露后,第一时间查看服务器日志。发现登录模块下远程调用了几个模块。

  1. 由入口的auth模块的服务器日志确定,调用的web模块下的获取用户方法超时
  2. 获取用户方法内调用comm模块获取客户信息方法超时
  3. 进入comm模块查看日志,并无异常提示,日志文件处于中断状态,日志无打印且服务正在运行
  4. 大概猜到服务当前阻塞状态,导致请求进不来。遂通过jps、jstack等命令确定问题代码。
  5. 最后由公司内的技术部定位具体问题:
    5.1 数据库连接池配置方式有问题,导致只有8个连接生效。
    5.2 system模块占用数据库连接,auth模块获取数据权限,comm模块请求system模块获取数据权限。
    5.3 system模块连接不释放,需要等待auth模块返回数据。auth模块又需要请求system模块,等待连接释放才能获取数据返回。
  6. 如此导致一个相互等待资源释放导致的死锁。

问题解决

项目原有设计在system模块有内存缓存,在获取数据权限之后就存在本地。在正常情况下,一般不会出现问题,当在缓存失效时,并发量大的时候,就容易出现这个问题。
最终解决方案:数据库连接数调高并重启应用服务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值