2012-07-10 35 views
1

我試圖在Apache 2.0/2.2/2.4上同時運行數百個cgi程序(perl或其他語言)。我的測試環境是帶有1GB RAM的Windows Server 2003 R2。運行cgi程序時是否有Apache Service的連接/內存限制?

在程序中,我使用無限循環或「$ _ = < STDIN>」來保持每個進程的活動。在Apache配置中,我將足夠大的所有相關配置(例如ThreadPerChild)設置爲1000.然後,我使用JMeter測試200個請求。當我在控制檯應用程序中運行Apache時,它工作正常,並且所有200個cgi進程都在運行。但是,當我將Apache作爲Windows服務運行時,只有60-100個進程將併發運行。其他人不會開始,除非我殺死任何正在運行的進程我不知道這是什麼原因。 Apache服務在運行cgi程序時是否存在連接/內存限制?謝謝!

回答

2

MaxClients參數httpd.conf文件設置了apache服務器連接的最大限制。 默認連接限制爲256.

您可以通過打開httpd.conf文件並搜索MaxClients來檢查它是否適用於您的服務器。

linux中httpd.conf的默認位置是/etc/httpd/conf/httpd.conf

在Windows上,CONF文件的默認位置是C:/Program Files/Apache Group/Apache/conf/httpd.conf

它看起來是這樣的。

# StartServers: number of server processes to start 
# MinSpareServers: minimum number of server processes which are kept spare 
# MaxSpareServers: maximum number of server processes which are kept spare 
# ServerLimit: maximum value for MaxClients for the lifetime of the server 
# MaxClients: maximum number of server processes allowed to start 
# MaxRequestsPerChild: maximum number of requests a server process serves 
<IfModule prefork.c> 
StartServers  8 
MinSpareServers 5 
MaxSpareServers 20 
ServerLimit  256 
MaxClients  256 
MaxRequestsPerChild 4000 
</IfModule> 

您可以設置MaxClients值到需要的一切,然後重新啓動應用chages服務器。

+0

我嘗試了所有的配置,但不幸的是他們都不重要。如果它只是conf問題,它應該適用於控制檯應用程序和服務。我昨天終於找出原因。這是Windows桌面堆大小的重要。 Windows僅爲每個用戶服務分配768kb堆大小,並且不知何故我的進程使其100%使用率並導致其他人失敗。不管怎麼說,還是要謝謝你! – 2012-07-12 14:08:24

相關問題