我想扩展Phusion Passenger的Max pool size
设置。我正在使用Nginx和Phusion Passenger(单线程)。这意味着每次Passenger生成一个新的Rails实例时,Rails实例将是单线程的,因此只需要1个数据库连接,这就是我将数据库池指定为1的原因:
default: &default
adapter: mysql2
encoding: utf8
collation: utf8_unicode_ci
pool: 1
username: root
password:
host: localhost
根据文件:
最大池大小表示Passenger的最大进程数 会保持。有一个限制,因为每个过程都消耗 内存,因此有太多进程可能会导致服务器崩溃。这个限制 可通过--max-pool-size命令行选项进行配置。 乘客不会超过此限制。
当我运行passenger-status
时,它显示进程的内存占用为231M:
# passenger-status
...
Requests in queue: 0
* PID: 1982 Sessions: 0 Processed: 28 Uptime: 35d 1h 47m 47s
CPU: 0% Memory : 231M Last used: 1s a
我的服务器包含2049mb的内存。考虑到系统使用的其他资源(0.9),我使用以下公式:
(2049 * 0.9) / 231 = 8
因此,我的最大池大小可以安全地为8.也就是说,我可以同时使用8个Passenger进程。但是,如果突然间,我有20个tcp连接到我的服务器,其他12个tcp连接是否必须等待(被乘客阻止),直到其他tcp连接关闭(在他们完成http请求之后)? (我假设乘客进程对应于单线程应用程序服务器上服务器上的tcp连接)。