HttpClient+事务发生死锁,导致服务假死

背景:Springboot服务端业务代码中包含HttpClient请求第三方的接口,由于第三方要求,将超时时间设置40S。另外在业务代码中有操作数据库的动作,所以同时创建了事务。

问题:当第三方接口出现问题,大量客户端请求服务开始堆积,客户端超时(5S)后,导致服务端TCP被动关闭链接,产生大量的CLOSE_WAIT的链接,同时,由于代码中包含HttpClient长时间的请求等待及操作数据库的事务不断创建,中间发生了死锁现象(数据库是sqlserver,高并发下select和update的操作导致了死锁),表被锁死,以致服务彻底假死。

解决办法:

1、使用HttpClient连接池(使用监控线程,定时回收和关闭无效链接)

2、去除事务(包含有HttpClient的业务逻辑中尽量不使用事务)

3、Linux服务TCP/IP配置调优。

相关代码就不展示了,只提供下思路。

参考:https://blog.csdn.net/hellozhxy/article/details/90023048

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值