我有一个流量相对较少的网站,通常由 3 或 4 个乘客实例顺利提供服务。
然而,有时它会受到大量自动请求的冲击,这些请求可能需要 15-20 秒才能完成。这会导致全局队列备份,服务器对普通用户无响应:
----------- General information ------
max = 18
count = 18
active = 17
inactive = 1
Waiting on global queue: 115
十五分钟后,重新启动 apache 清除队列后一切恢复正常:
----------- General information -----------
max = 18
count = 4
active = 0
inactive = 4
Waiting on global queue: 0
----------- Application groups -----------
/apps/mailapp/current:
App root: /apps/mailapp/current
* PID: 31044 Sessions: 0 Processed: 275 Uptime: 14m 21s
* PID: 31047 Sessions: 0 Processed: 314 Uptime: 14m 21s
* PID: 31060 Sessions: 0 Processed: 284 Uptime: 14m 17s
我已将最大实例数增加到 18 个(大约是 VPS 上可以同时运行的实例数),这有一点帮助,但作用不大。我已尽可能优化请求(从 30 秒左右缩短到 15-20 秒)。
由于导致其备份的请求是自动的,因此无需特别及时地为它们提供服务。有什么方法可以留出一些仅用于处理此特定请求的乘客实例吗?(可能基于 URL 路径)。
答案1
我差不多已经修复了这个问题。
我已经使用 apache 创建了一个新的虚拟主机,并对最大实例数量进行了限制。
这在操作系统上被符号链接以指向原始应用程序。这样我就可以根据需要运行主应用程序,并运行任意数量的实例,但对符号链接的虚拟主机可以运行的实例数量有所限制。
这引发了与符号链接主机上的 CPU 使用率有关的一个相关问题:Apache/Passenger 和 cpulimit