乘客在启动时和经过几秒钟的空闲时间后变慢

时间:2014-01-31 12:20:51

标签: ruby-on-rails-3 passenger phusion

我目前正面临Passenger(4.0.18)与简单的Rails 4.0.0应用程序相结合的问题。 问题是,在启动apache之后,第一个请求非常慢(通常为30.x秒)。以下请求非常快,但如果应用程序空闲20秒以上,则会再次发生同样的情况。

现在,这个问题一般已经在这里讨论了几次,当然我已经调整了apache配置:

 PassengerSpawnMethod smart
 PassengerPoolIdleTime 1000
 RailsAppSpawnerIdleTime 0
 PassengerMaxRequests 1000
 PassengerMaxPreloaderIdleTime 0

但这根本没有帮助。如果我检查乘客状态,它会告诉我:

 Version : 4.0.18
 Date    : 2014-01-31 13:06:59 +0100
 Instance: 20601
 ----------- General information -----------
 Max pool size : 6
 Processes     : 1
 Requests in top-level queue : 0

有趣的是,当我在执行请求时对乘客状态进行“观察”时,这里没有任何改变。 (特别是请求行)。

我已经摆弄了tcpdump,所有请求都及时到达,因此没有可见的网络延迟。 我还启用了apache扩展日志记录(添加了请求时间) - 这非常有趣,假设正常请求需要大约200毫秒,然后其中一个慢速请求需要30.2秒。

知道这可能导致什么?

Apache是​​2.2.15。 (redhat版本,带有后向安全补丁... :))

提前致谢, 的Björn

2 个答案:

答案 0 :(得分:2)

使用PassengerPreStart:http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerPreStart。该文档部分还解释了为什么您会遇到您观察到的行为。

答案 1 :(得分:-1)

一种简单安全的方法来确保您的服务器已启动并可以处理请求,该方法是每crone分钟(curl n)。

我的老太婆脚本是:

n = 3

您可以验证crone任务here