线上接口流量突增,扛不住了

本文讲述了系统在银行uat环境遇到流量突增导致性能问题,通过排查连接池大小、tomcat性能优化和接口代码优化,成功提升系统性能。调整了HikariCP连接池配置,增大了tomcat的maxThreads、maxConnections和acceptCount,并利用arthas进行代码优化,包括减少数据库查询和引入本地缓存。总结中反思了公司管理和研发流程的不足。
摘要由CSDN通过智能技术生成

概述

本篇文章主要记录下公司的系统部署到银行内部内uat环境后,流量突增后,导致整个系统所有请求耗时十分之久,最后崩溃,无奈连夜赶往现场,解决处理。

事情经过和原因分析

银行现场的实施同事反馈,平台页面打开都要超过5分钟,任何接口都十分卡顿。我一听就不对劲了,怎么可能呢?

到现场才发现,现场只部署了了一个节点,在UAT阶段流量接入以后,平台直接就扛不住了,其中有个接口高峰期的qps是1000,但是通过浏览器发现这个接口的平均相应时间是15s,而tomcat本身默认的线程数是200个,所以肯定导致其他所有的请求阻塞了,因为没有连接资源了,造成服务的不可用。

所以除了扩充节点解决问题以外,还需要提高单节点接口的性能。

优化手段

排查连接池大小

其实大部分的请求都是会访问数据库,而数据库严重依赖连接池数量,如果一个项目连接池数量设置过小,那势必会导致性能下降。

Hikarip连接池配置说明如下:

#最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
spring.datasource.hikari.minimum-idle=5
#最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
spring.datasource.hikari.maximum-pool-size=100
#自动提交从池中返回的连接,默认值为true
spring.datasource.hikari.auto-commit=true
#空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
#只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout=30000
#连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name=Hikari
#连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短;单位ms
spring.datasource.hikari.max-lifetime=55000
#连接超时时间:毫秒,小于250毫秒,会被重置为默认值30秒

后来发现项目中设置的最大连接数maximum-pool-size

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值