weixin_43979923 2022-05-26 19:10 采纳率: 0%
浏览 1470
已结题

macbook启动springboot项目时redis连接池出现异常导致无法启动项目

问题遇到的现象和发生背景

macbook air 2020
用windows和linux都是可以启动的没有问题,应该不是redis服务端的问题,猜测是macbook的问题。但苦于公司没有别人用macbook无法验证
项目之前用的单点redis,10次有9次连不上,也是报这个错。那为什么偶尔能启动呢?
现在换成集群模式(Sentinel+主备模型),10次有10次都连不上
发现了用redis客户端(Another Desktop Manager),只连主节点,也不是每次都能连上,大约有%50的可能性连接会出现超时的情况,并报错:Redis Client On Error: Error: connect ETIMEDOUT Config right?可能这就是连接池出现问题的原因,问题该怎么排查呢?为什么会有%50几率连接不上?

运行结果及报错内容
{"@timestamp":"2022-05-26T17:29:44.001+0800","level":"INFO","class":"org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:335)","Content":"Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)"}
 {"@timestamp":"2022-05-26T17:29:44.037+0800","level":"INFO","class":"org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker.postProcessAfterInitialization(PostProcessorRegistrationDelegate.java:335)","Content":"Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)"}
 {"@timestamp":"2022-05-26T17:29:44.232+0800","level":"INFO","class":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:108)","Content":"Tomcat initialized with port(s): 8383 (http)"}
 {"@timestamp":"2022-05-26T17:29:44.238+0800","level":"INFO","class":"org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173)","Content":"Initializing ProtocolHandler ["http-nio-8383"]"}
 {"@timestamp":"2022-05-26T17:29:44.238+0800","level":"INFO","class":"org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173)","Content":"Starting service [Tomcat]"}
 {"@timestamp":"2022-05-26T17:29:44.238+0800","level":"INFO","class":"org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173)","Content":"Starting Servlet engine: [Apache Tomcat/9.0.38]"}
 {"@timestamp":"2022-05-26T17:29:44.314+0800","level":"INFO","class":"org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173)","Content":"Initializing Spring embedded WebApplicationContext"}
 {"@timestamp":"2022-05-26T17:29:44.314+0800","level":"INFO","class":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext(ServletWebServerApplicationContext.java:285)","Content":"Root WebApplicationContext: initialization completed in 21696 ms"}
 {"@timestamp":"2022-05-26T17:29:44.544+0800","level":"INFO","class":"org.redisson.Version.logVersion(Version.java:41)","Content":"Redisson 3.16.8"}
 {"@timestamp":"2022-05-26T17:29:49.787+0800","level":"INFO","class":"org.redisson.connection.SentinelConnectionManager.<init>(SentinelConnectionManager.java:124)","Content":"master: redis://168.168.0.64:8007 added"}
 {"@timestamp":"2022-05-26T17:29:49.803+0800","level":"INFO","class":"org.redisson.connection.SentinelConnectionManager.<init>(SentinelConnectionManager.java:141)","Content":"slave: redis://168.168.0.65:8009 added"}
 {"@timestamp":"2022-05-26T17:29:49.803+0800","level":"INFO","class":"org.redisson.connection.SentinelConnectionManager.<init>(SentinelConnectionManager.java:141)","Content":"slave: redis://168.168.0.64:8008 added"}
 {"@timestamp":"2022-05-26T17:29:49.848+0800","level":"INFO","class":"org.redisson.connection.SentinelConnectionManager.lambda$registerSentinel$30(SentinelConnectionManager.java:562)","Content":"sentinel: redis://168.168.0.65:9009 added"}
 {"@timestamp":"2022-05-26T17:29:59.900+0800","level":"INFO","class":"org.redisson.connection.pool.ConnectionPool$1.lambda$run$0(ConnectionPool.java:161)","Content":"1 connections initialized for 168.168.0.64/168.168.0.64:8007"}
 {"@timestamp":"2022-05-26T17:30:09.752+0800","level":"WARN","class":"org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:559)","Content":"Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'wxMiniProgramConfig': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [com/syni/admin/mis/config/redis/RedisTemplateConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to init enough connections amount! Only 13 of 24 were initialized. Redis server: 168.168.0.64/168.168.0.64:8007"}
 {"@timestamp":"2022-05-26T17:30:09.754+0800","level":"INFO","class":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource.destroy(DynamicRoutingDataSource.java:217)","Content":"dynamic-datasource start closing ...."}
 {"@timestamp":"2022-05-26T17:30:09.760+0800","level":"INFO","class":"com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2003)","Content":"{dataSource-3} closing ..."}
 {"@timestamp":"2022-05-26T17:30:09.760+0800","level":"INFO","class":"com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2075)","Content":"{dataSource-3} closed"}
 {"@timestamp":"2022-05-26T17:30:09.761+0800","level":"INFO","class":"com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2003)","Content":"{dataSource-2} closing ..."}
 {"@timestamp":"2022-05-26T17:30:09.761+0800","level":"INFO","class":"com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2075)","Content":"{dataSource-2} closed"}
 {"@timestamp":"2022-05-26T17:30:09.761+0800","level":"INFO","class":"com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2003)","Content":"{dataSource-1} closing ..."}
 {"@timestamp":"2022-05-26T17:30:09.762+0800","level":"INFO","class":"com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:2075)","Content":"{dataSource-1} closed"}
 {"@timestamp":"2022-05-26T17:30:09.762+0800","level":"INFO","class":"com.baomidou.dynamic.datasource.DynamicRoutingDataSource.destroy(DynamicRoutingDataSource.java:221)","Content":"dynamic-datasource all closed success,bye"}
 {"@timestamp":"2022-05-26T17:30:09.769+0800","level":"INFO","class":"org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173)","Content":"Stopping service [Tomcat]"}
 {"@timestamp":"2022-05-26T17:30:09.779+0800","level":"INFO","class":"org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener.logMessage(ConditionEvaluationReportLoggingListener.java:136)","Content":"

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled."}
 {"@timestamp":"2022-05-26T17:30:09.786+0800","level":"ERROR","class":"org.springframework.boot.SpringApplication.reportFailure(SpringApplication.java:837)","Content":"Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'wxMiniProgramConfig': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [com/syni/admin/mis/config/redis/RedisTemplateConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to init enough connections amount! Only 13 of 24 were initialized. Redis server: 168.168.0.64/168.168.0.64:8007
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
    at com.syni.admin.mis.BackendApplication.main(BackendApplication.java:24)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [com/syni/admin/mis/config/redis/RedisTemplateConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to init enough connections amount! Only 13 of 24 were initialized. Redis server: 168.168.0.64/168.168.0.64:8007
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:635)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:453)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:527)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650)
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:239)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318)
    ... 18 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to init enough connections amount! Only 13 of 24 were initialized. Redis server: 168.168.0.64/168.168.0.64:8007
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650)
    ... 34 more
Caused by: org.redisson.client.RedisConnectionException: Unable to init enough connections amount! Only 13 of 24 were initialized. Redis server: 168.168.0.64/168.168.0.64:8007
    at org.redisson.connection.pool.ConnectionPool$1.lambda$run$0(ConnectionPool.java:153)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
    at org.redisson.connection.pool.ConnectionPool.promiseFailure(ConnectionPool.java:310)
    at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$3(ConnectionPool.java:276)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
    at org.redisson.client.RedisClient$1$2.run(RedisClient.java:235)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:750)
Caused by: java.util.concurrent.CompletionException: io.netty.channel.ConnectTimeoutException: connection timed out: 168.168.0.64/168.168.0.64:8007
    at java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326)
    at java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338)
    at java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925)
    at java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913)
    ... 11 more
Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: 168.168.0.64/168.168.0.64:8007
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:261)
    at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
    at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170)
    ... 8 more
"}
 Disconnected from the target VM, address: '127.0.0.1:62930', transport: 'socket'

打进断点最终报错是nio的连接超时

我的解答思路和尝试过的方法
  • 试过调大redis的超时时间,不行
  • 试过加以下代码,不行
    config.useSingleServer().setConnectionMinimumIdleSize(10);
    
  • 试过加以下配置,不行
    spring.redis.timeout=5000
    # 连接池最大连接数(使用负值表示没有限制)
    spring.redis.lettuce.pool.max-active=3
    # 连接池中的最小空闲连接
    spring.redis.lettuce.pool.min-idle=2
    # 连接池中的最大空闲连接
    spring.redis.lettuce.pool.max-idle=3
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.lettuce.pool.max-wait=-1
    #在关闭客户端连接之前等待任务处理完成的最长时间,在这之后,无论任务是否执行完成,都会被执行器关闭,默认100ms
    spring.redis.lettuce.shutdown-timeout=100
    #是否缓存空值
    spring.cache.redis.cache-null-values=false
    
  • 试过调大macbook的TCP连接数,不行
    https://www.yuanmomo.net/2019/07/26/mac-max-connections-config/
  • 试过换IDEA版本,不行
  • 直接java -jar jar包,不行
  • 试过换JDK版本,不行
  • protected-mode yes 改成 protected-mode no也别捣乱了,虽然没进配置看过,但其他电脑能连接说明没问题
  • 有没有可能是redis服务限制了MacOSX系统?
  • 有没有可能是macbook底层的tcp协议与其他平台有所不同?或者配置不对?
  • 实测报错数量 of 24都在12左右,这说明了什么?
    Only 13 of 24 were initialized
    
  • 我的理解是24个连接只有部分连接成功,为什么部分成功部分失败?
  • 看网上的回答都是怎么解决(虽然都不行),也没有人深究过问题产生的原因。难过
我想要达到的结果

最好是能彻底解决这个问题。
如果不能,有没有办法屏蔽掉启用redis线程池。起码能让我能在本地启动项目调试代码。

  • 写回答

7条回答 默认 最新

  • 张矜持 2022-05-30 10:51
    关注

    可以先确定是不是代码的问题, 因为别的系统不是可以正常运行么。
    现在mac上用redis连接工具连上服务器 , 操作看看有没有问题 ,如果连接工具也不行 ,那可能是网络的问题。
    否则,再去排查代码。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月2日
  • 修改了问题 6月1日
  • 修改了问题 6月1日
  • 创建了问题 5月26日

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?