gpt4 book ai didi

ruby-on-rails - Rails3 事件记录池和 Sidekiq 多线程

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:28 27 4
gpt4 key购买 nike

我正在将 sidekiq 与 rails3 结合使用。 Sidekiq 默认运行 25 个线程。我想增加多线程限制,我通过更改 sidekiq.yml 来完成此操作。

那么,database.yml中的pool value和sidekiq多线程是什么关系呢? mysql池的最大值是多少。是否取决于服务器内存?

sidekiq.yml

:verbose: true
:concurrency: 50
:pool: 50
:queues:
- [queue_primary, 7]
- [default, 5]
- [queue_secondary, 3]

数据库.yml

production:
adapter: mysql2
encoding: utf8
reconnect: false
database: db_name
pool: 50
username: root
password: root
socket: /var/run/mysqld/mysqld.sock

最佳答案

每个 Sidekiq 作业根据您的配置在最多 50 个线程之一中执行。在作业中,任何时候 ActiveRecord 模型需要访问数据库时,它都会使用此进程中所有 ActiveRecord 模型共享的可用连接池中的数据库连接。连接池允许线程获取连接或阻塞,直到有空闲连接可用。

如果您的 ActiveRecord 数据库连接池中的可用连接少于运行 Sidekiq 作业/线程,作业将被阻止等待连接并可能超时(约 5 秒后)并失败。

这就是为什么在 sidekiq 工作进程中拥有与线程一样多的可用数据库连接很重要。

Unicorn 是一种单线程、多进程的服务器 - 因此您不应该为每个 Unicorn 后端工作进程需要一个以上的连接。

但是,数据库只能处理这么多连接(取决于操作系统、硬件和配置限制),因此您需要确保在需要的地方分配数据库连接,并且不要超过最大连接数。

例如,如果您的数据库限制为 1000 个连接,则您只能运行 20 个 sidekiq 进程,每个进程有 50 个线程,不能运行任何其他进程。

关于ruby-on-rails - Rails3 事件记录池和 Sidekiq 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com