帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查
发布时间:2024-03-11 05:36:49   分类:帮助文档
spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查 一、背景 在今天上午的时候,突然收到大量的sentry报错,都是关于redis连接超时的警告。 首先想到的是去查看redis的监控,发现那个时间段,redis的请求数剧增,cpu使用率和带宽都陡增双倍。 下面的是redis监控的cpu情况 最后贴一张redis的流量 到目前为止,可以看到redis的压力确实上来了。 随之,阿里云也给我们发来告警,说redis连接超时,导致主从切换。 于是,我们推测是程序的访问量剧增,接口中都又依赖redis,导致访问redis的请求等陡增。 当然,至于为什么会发生,是不是就是redis出问题了呢?最后又应该怎么调整? 是调整程序,还是加大redis的配置? 二、监控 从监控大盘能看到的信息有:httpq qps高达17k~18k,jvm节点的内存和gc等没有任何异常,毫无压力。但是redis访问却超时。(程序设置连接redis的超时时间为3秒) 1、http qps 从上图可以看出,服务当时的qps是有显著上升的,接近翻一番。 2、arms的redis监控 从服务的角度,也即redis客户端的角度,分析redis的连接数,一直是在1个上下,最多也不超过2个。 3、cloudDBA 由于我们缺少对redis客户端的连接监控,从上图arms的redis监控可以看出,它也缺乏对lettuce外的监控。 所以说,我们只能从阿里云的cloudDBA,从dba的角度,反向去看连接上来的实例会话数。 而一般情况下,redis客户端有多少呢?1或2个,见下: 4、sentry 推荐大家安装这块日志聚合工具,可以定制其监控报警。我们便是因为收到sentry报警,才及时知晓线上有什么故障的。 下面是摘自sentry的主要报错信息: QueryTimeoutException Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 3 second(s) 三、redis连接数 1、lettuce 源码见类LettuceConnectionFactory 其中的构建函数中,可以看到,默认this.shareNativeConnection = true; 表示共享本地线程。 下面,看看关于连接池的配置项: 详见类org.springframework.boot.autoconfigure.data.redis.RedisProperties,其中Pool类是跟线程池相关的配置。 那么,是在哪个地方用到的呢? org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration.PoolBuilderFactory 把RedisProperties.Pool赋值给GenericObjectPoolConfig,详见下: 如果需要池化技术,你需要额外引入线程池框架。(因为我这项目里没有引入,所以看到是标红的,编译不通过) 换句话说,默认情况下,我们使用的redis客户端只会创建一个连接。 org.apache.commons commons-pool2 2.7.0