乘客在Ajax调用上生成新的ruby实例

时间:2010-07-16 12:03:21

标签: ruby-on-rails ruby passenger

我对Passenger和ajax调用有一些严重的性能问题。似乎每次我进行ajax调用时,都会启动一个新的ruby实例而不是使用响应原始页面请求的实例,这使得它非常慢。可以在几秒钟内完成多个ajax请求的事实并不能使情况变得更好。

我调用的动作本身很慢(它生成一个PDF,通常需要5-10秒),但是当通过Ajax调用时,响应时间是1-3分钟!这在我的开发环境中没有问题,因为我使用的是单个mongrel实例,但是Passenger在这里确实遇到了麻烦。

我尝试了for this SO question提供的Apache / Passenger选项,但没有运气。

遇到类似问题并找到解决方法的任何人?

2 个答案:

答案 0 :(得分:0)

你何时解雇AJAX请求?也许它与页面加载重叠?

在触发AJAX请求之前,等待DOM load事件可能会有所帮助。

答案 1 :(得分:0)

实际上,答案在于问题。问题在于Passenger会产生许多新的应用程序实例,而不是使用现有的池。因此,解决此问题的一种方法是设置最大工作人数:

PassengerMaxPoolSize 2

这解决了我的问题,并将响应时间缩短到原始时间的10%-25%。

<强>更新

更好的方法是限制可以处理单个用户的工作人员数量。这是我最终使用的方法:

PassengerMaxInstancesPerApp 1