2010-04-05 59 views
0

我有一個在OSX Snow Leopard中以生產模式運行的Rails + Apache2 + Postgres + Passenger應用程序。該應用程序充當雲中另一個應用程序的數據倉庫,因此我不斷地獲取API調用到我的OSX生產版本。在我的Rails + Apache2 +乘客生產設置上堆積過多的httpd進程?

最近重新啓動後,我發現大量的httpd進程堆積起來,最終需要重新啓動apache。我沒有改變任何設置,一切都運行良好。任何想法的最佳方式來解決這個問題?

 

$ ps -ef|grep httpd 
    0 6203  1 0 0:00.20 ??   0:00.47 /usr/sbin/httpd -D FOREGROUND 
    70 6222 6203 0 0:00.05 ??   0:00.11 /usr/sbin/httpd -D FOREGROUND 
    70 6224 6203 0 0:00.31 ??   0:00.50 /usr/sbin/httpd -D FOREGROUND 
    70 6233 6203 0 0:00.05 ??   0:00.10 /usr/sbin/httpd -D FOREGROUND 
    70 6234 6203 0 0:00.43 ??   0:00.64 /usr/sbin/httpd -D FOREGROUND 
    70 6243 6203 0 0:00.02 ??   0:00.03 /usr/sbin/httpd -D FOREGROUND 
    70 6319 6203 0 0:00.08 ??   0:00.16 /usr/sbin/httpd -D FOREGROUND 
    70 6334 6203 0 0:00.02 ??   0:00.05 /usr/sbin/httpd -D FOREGROUND 
    70 6469 6203 0 0:00.04 ??   0:00.08 /usr/sbin/httpd -D FOREGROUND 
    70 6487 6203 0 0:00.36 ??   0:00.48 /usr/sbin/httpd -D FOREGROUND 
    70 6593 6203 0 0:00.36 ??   0:00.48 /usr/sbin/httpd -D FOREGROUND 
    70 6709 6203 0 0:00.04 ??   0:00.08 /usr/sbin/httpd -D FOREGROUND 
    70 6718 6203 0 0:00.04 ??   0:00.10 /usr/sbin/httpd -D FOREGROUND 
    70 6834 6203 0 0:00.01 ??   0:00.03 /usr/sbin/httpd -D FOREGROUND 
    70 6852 6203 0 0:00.00 ??   0:00.00 /usr/sbin/httpd -D FOREGROUND 
    70 6853 6203 0 0:00.01 ??   0:00.02 /usr/sbin/httpd -D FOREGROUND 
 

回答

0

有你安裝了其它Apache Web服務器或者是它的一個已經安裝?

+0

這是唯一安裝的。也許請求是超時?我沒有看到生產日誌,Apache錯誤日誌或訪問日誌中的任何錯誤。我的乘客狀態看起來很滿:

  --- General information --- max = 6 count = 6 active = 5 inactive = 1 Waiting on global queue: 0 --- Domains --- PID: 8810 Sessions: 0 Processed: 238 PID: 9443 Sessions: 3 Processed: 49 PID: 7902 Sessions: 3 Processed: 2600 PID: 8416 Sessions: 4 Processed: 212 PID: 9253 Sessions: 4 Processed: 234 PID: 8438 Sessions: 4 Processed: 227  
LeoAlmighty 2010-04-05 09:40:19

+0

ok。從你的信息總運行的應用程序是6.我想你應該考慮增加PassengerMaxPoolSize。還要考慮打開PassengerHighPerformance,PassengerUseGlobalQueue選項。由於公平的負載平衡,如果有一個長時間運行的請求,那麼其他請求將不會被處理。我想看看這些文檔,看看最適合你的是一件好事。 http://www.modrails.com/documentation/Users%20guide.html – 2010-04-05 10:38:41

0

好吧,這是我可以從我的設置中找出。每次我運行一個應用程序2個httpd進程產卵。我目前有3個應用程序正在運行,因此有6個httpd進程。它與乘客有關。它與apache緊密集成。

這就是我得到:

0 20  1 0 0:00.32 ??   0:01.48 /usr/sbin/httpd -D FOREGROUND 
70 104 20 0 0:00.01 ??   0:00.01 /usr/sbin/httpd -D FOREGROUND 
70 264 20 0 0:00.01 ??   0:00.01 /usr/sbin/httpd -D FOREGROUND 
70 265 20 0 0:00.01 ??   0:00.01 /usr/sbin/httpd -D FOREGROUND 
70 271 20 0 0:00.01 ??   0:00.01 /usr/sbin/httpd -D FOREGROUND 
70 275 20 0 0:00.01 ??   0:00.01 /usr/sbin/httpd -D FOREGROUND 
70 277 20 0 0:00.00 ??   0:00.00 /usr/sbin/httpd -D FOREGROUND 
70 278 20 0 0:00.00 ??   0:00.00 /usr/sbin/httpd -D FOREGROUND 

我不認爲它是一個問題。如果我是正確的,那麼按照您的流程列表猜測,您有大約7個應用程序在雲中運行。

根據該乘客的Phusion文檔:


PassengerMaxPoolSize

on Rails的或機架應用程序實例,其可以是同時活動的Ruby的最大數量。數量越大,內存使用率越高,但處理併發HTTP客戶端的能力提高。

最佳值取決於您的系統硬件和服務器的平均負載。你應該嘗試不同的值。但一般來說,該值應至少等於您擁有的CPU(或CPU核心)數量。如果您的系統具有2 GB的RAM,那麼我們推薦值爲30.如果您的系統是虛擬專用服務器(VPS)並且具有大約256 MB RAM,並且還運行其他服務(例如MySQL),那麼我們建議您將值2.

如果您發現您的服務器無法處理您的Rails/Rack網站上的負載(即內存不足),那麼您應該降低此值。 (雖然如果您的網站真的很受歡迎,那麼您應該強烈考慮升級您的硬件或獲取更多服務器。)

此選項可能只會在全局服務器配置中發生一次。默認值爲6.


您提到過:「最終需要重新啓動apache」。那麼,你的任何Rails應用程序在一個點之後會凍結嗎?

+1

是的,在某個點之後,所有rails應用程序都會凍結並停止響應任何http請求。我在過去的24小時內沒有改變任何設置,現在看起來運行良好,至少沒有鎖定和堆放httpd進程。我需要監視交通情況,看看是否是原因,然後相應調整乘客設置。謝謝。 :) – LeoAlmighty 2010-04-06 08:35:38

+0

很高興聽到現在一切都很好。 :) – 2010-04-07 13:28:21