分享一个项目在测试环境中遇到的问题,还为解决、、、先占个位,大佬帮忙看看!

一个商城平台,PHP和java写的,大部分是PHP,项目的A、B类两种库存都是从不同的三方接口同步过来的,A类库存通过定时任务每小时更新一次保存在redis中,B类库存每天凌晨2点通过定时任务同步到数据库,然后PHP查数据库后保存在redis中,页面点击商品详情会看到库存信息,但是访问失败,服务器调接口能调通,但是页面上调不通,服务器上ps -ef |grep java又能查到服务还存在,重启服务后接口访问正常,库存就能正常查到;

服务器上查日志报错信息是:

JedisPool - Java.net.SocketException: Broken pipe (write failed)

网上查了很多资料都没能解决,好像是因为redis的管道断开,redis配置也检查了,最大连接数默认10000,本地设置的8000,在redis可视化工具上看到连接数并没多少,发布生产的时候,用户并发下单,访问库存,几分钟断一次,然后重启服务就行了,隔几分钟又断了、、、

对比了application.yml文件和redisConfig类发现yml文件中配置了max-axtive,但是配置类中没引入,不知道是不是这个问题;

如图:

 

根据网上查到的解决方式现在两种方案想试试:

第一种:redis配置类加上max-active试试;

第二种:定时任务跑库存同步 时用 了线程池,多线程来跑的,多线程写入时,可能会影响;

第三种:配置文件中加上下面配置(博客找的解决方式):

config.setTestOnBorrow(false)
config.setTestOnReturn(false)
config.setTestWhileIdle(false)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐