记一次由于数据库连接池导致项目某些接口不返回,网页提示504 gateway time-out

1.项目环境

1 . 目前在生产 29.99 , 准生产28.193都部署了项目 .
2 . 由于单机部署项目如果服务器挂掉客户就没法使用 , 所以公司提出在另外两台部署双机 .
3 . 相同的代码在 27.3 , 27.8部署双机 .
4 . 前端文件放在 27.1 , 27.6服务器Nginx/html目录下 , 前端访问F5到 27.1和27.6的Nginx , 两台Nginx再负载到27.3和27.8两台后端 .
5 . 项目采用springboot 1.5.12版本

2.问题表现

1 . 用户登录有可能点了登录半天没反应 , 然后弹窗网络连接失败 , f12查看response返回504 gateway time-out .
2 . 点击一个功能之后同时发送三个请求有可能有一个请求不返回数据 , 过一段时间提示网络错误 , f12查看response返回504 gateway time-out . 但是并不是一直是这些接口 , 所有接口都是时好时坏 .
3 . 相同的代码在生产 29.99 , 准生产28.193并没有任何问题.

3.问题排查

(1) . 百度回答有的说是代码问题导致的 , 但是我目前的生产和准生产正常运行 , 所以这个答案pass
(2) . 说的是nginx配置不合理
记一次由于数据库连接池导致项目某些接口不返回,网页提示504 gateway time-out_第1张图片
我用这个方法配置重启Nginx , 但是无效 , 说明我们项目问题跟文章问题不一样 .
(3) . 通过查看Nginx日志看到超时报错upstream timed out (110: Connection timed out) .
(4) . 继续百度upstream timed out (110: Connection timed out) .
(5) . 还是Nginx配置问题 , 说是Nginx超时时间过短 , 需要设置长一点
记一次由于数据库连接池导致项目某些接口不返回,网页提示504 gateway time-out_第2张图片
设置之后重启Nginx还是没用 , 说明可能不是Nginx的问题
(6) . 试了一下在服务器用curl请求接口 , 没有返回 , 看网上说有可能是springboot自带的tomcat假死 . 但是如果请求无权限的接口会报403 , 说明并不是tomcat假死 .
(7) . 在方法中每一行打印日志发现走到mapper这行代码之后无返回 , 发现问题应该是跟数据库连接问题
(8) . 用两台Nginx负载目前正常使用的正常和准生产 , 也出现了部分接口无返回的情况 . 我一脸懵逼 .
(9) . 请教公司在总部的大佬描述情况之后 , 大佬分析可能是两台双机服务器的网络不稳定导致数据库连接池出问题 .
(10) . 抱着试一试的心态更换了HikariCP连接池 , 目前双机没有出现接口不返回的情况了 ,

4.问题总结

应该是双机两台访问跟目前生产和准生产的访问方式比起来多了F5 , Nginx 转发次数更多等问题导致springboot 1.5.12自带的数据库连接池性能不够用 , 更换连接池之后解决问题 .

你可能感兴趣的:(记一次由于数据库连接池导致项目某些接口不返回,网页提示504 gateway time-out)