2010-07-16 39 views
0

Passenger和ajax調用有一些沉重的性能問題。似乎每次我進行ajax調用時,都會啓動一個新的ruby實例,而不是使用響應原始頁面請求的實例,從而使其非常緩慢。事實上,多個Ajax請求可以在幾秒鐘內完成,並不會讓情況變得更好。乘客在Ajax調用中產生新的ruby實例

我正在調用的操作本身非常慢(它會生成PDF,通常需要5-10秒),但通過Ajax調用時,響應時間爲1-3分鐘!這在我的開發環境中沒有問題,因爲我正在使用一個雜種實例,但Passenger在這裏真的很麻煩。

我試過了Apache/Passenger選項for this SO question,但沒有運氣。

任何遇到類似問題並找到解決方法的人員?

回答

0

其實答案就在於這個問題。問題在於Passenger產生許多新的應用程序實例,而不是使用現有的池。因此,要解決這個問題的一種方法是設置工人的最大數量:

PassengerMaxPoolSize 2 

這解決了我的問題,並削減了響應時間,10%的原始時間-25%。

更新

一個更好的辦法是限制可處理單個用戶的工人人數。這是我最終使用的方法:

PassengerMaxInstancesPerApp 1 
+0

你確定這是一個好方法嗎?隨着用戶的增長,您還需要增加池大小。 – 2010-07-22 06:49:29

+0

這是一個內部系統,同時擁有很少的用戶,但是這些用戶的交互性很高。如果這會造成問題,我會考慮堆疊請求並增加池大小。 – 2010-07-22 08:41:47

0

你什麼時候發射AJAX請求?也許它與頁面加載重疊?

這可能有助於在觸發AJAX請求之前等待DOM load事件。

+0

當用戶單擊按鈕時會觸發此請求。無論整個頁面是否已加載,速度都很慢。據我所知,瓶頸在於Passenger爲每個請求啓動一個新的ruby實例。也許我應該限制工作線程的最大數量。 – 2010-07-22 06:04:44