5

我目前在结合一个简单的 Rails 4.0.0 应用程序时遇到了乘客(4.0.18)的问题。问题是,在启动 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 版本,带有反向移植的安全补丁...:))

提前致谢, 比约恩

4

2 回答 2

2

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

于 2014-01-31T13:11:12.117 回答
-1

确保您的服务器已启动并准备好处理请求的一种简单而安全的方法是每分钟对网站进行一次crone工作(在我的情况下)。curlnn = 3

我的cron脚本是:

 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /bin/bash -l -c 'cd /var/www/example.com && curl -i https://www.example.com/ >> log/curl-www.example.com.log 2>&1'

您可以在此处验证 cron 任务

于 2018-09-12T13:03:03.363 回答