Ser*_*iGP 7 mysql scala slick hikaricp
我试图理解Slick-Hikari是如何工作的,我已经阅读了很多文档,但我有一个用例我的行为我不明白.
我正在使用Slick 3和Hikari,默认配置.我已经有一个同时连接〜1000个用户的生产应用程序.我的应用程序使用websockets,当我部署新版本时,所有客户端都重新连接.(我知道这不是处理部署的最佳方式,但我目前还没有集群.)当所有这些用户重新连接时,他们都开始进行查询以获得用户状态(狗堆效应).当它发生时Slick开始抛出很多错误,如:
java.util.concurrent.RejectedExecutionException: Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@4dbbd9d1 rejected from java.util.concurrent.ThreadPoolExecutor@a3b8495[Running, pool size = 20, active threads = 20, queued tasks = 1000, completed tasks = 23740]
我认为它正在发生的是,待处理查询的光滑队列已满,因为它无法处理从数据库请求信息的所有客户端.但是,如果我看到Dropwizard提供给我的指标,我会看到以下内容:
16:45我们接近部署.在旧实例终止之前,我们可以看到连接数从20增加到40.我认为这是正常的,因为部署过程是如何完成的.
但是,如果由于狗堆效应导致Slick的查询队列变满,为什么如果有20个连接可用,它不会使用超过3-5个连接?数据库表现非常好,所以我认为瓶颈在于Slick.
您对改进此部署过程有什么建议吗?我现在只有1000个用户,但我会在几周内获得更多用户.
小智 0
基于“拒绝”异常,我认为许多 slick 操作同时提交给 slick,这超出了 slick 中嵌入的队列的默认大小(1000)。
所以我认为你应该:
| 归档时间: | 
 | 
| 查看次数: | 438 次 | 
| 最近记录: |