2016-03-02 71 views
1

我正在運行的壓力測試與我的Apache 2.2在Windows Server 2008 R2上同時運行64位的許多連接。 〜500後( -/+ 10)的連接由我得到這個錯誤在error.log中阿帕奇:無法初始化zend_mm存儲[win32]

無法初始化zend_mm存儲[的Win32]

我試圖增加php.initmemory_limit但沒有沒有幫助。爲什麼在增加memory_limit之後,它仍然會在相同數量的連接上失敗?

回答

1

此錯誤表示您已耗盡內存池。壓力測試可以做到這一點。即使你提高了PHP的限制,你的內存也只能分配到你的服務器上。你說你的服務器是32位的,這意味着你最多有4GB的RAM加上你的交換文件。 500個連接可能很容易淹沒一臺小型服務器。

+0

對不起假信息(編輯問題),服務器是64位Windows 2008 R2與4 GB的RAM。但是你的陳述仍然是事實。但是,每個連接分配多少內存?它可以在PHP中配置嗎? – Griffin

+0

每個PHP線程都有它自己的內存池(當PHP超出該限制時,你會得到一個非常不同的錯誤),然後Apache也獲得一些內存。但是你正在打硬盤,而不是軟帽。即使你調整了一些,我也不確定你可以在500個併發連接的資源中創建一個服務器。考慮一個具有更多處理器/內存的虛擬機 – Machavity

+0

也要考慮到,即使你確實讓它與一個RAM池中的小塊一起生活,它也會像瘋狂地分頁到磁盤以跟上。 – Machavity

0

所以最後發現,如果是的ThreadsPerChildhttpd-mpm.conf這是數量:

<IfModule mpm_winnt_module> 
    ThreadsPerChild  1500 
    MaxRequestsPerChild 0 
</IfModule> 

我已經把它改爲:

<IfModule mpm_winnt_module> 
    ThreadsPerChild  64 
    MaxRequestsPerChild 0 
</IfModule> 

而且這是工作的罰款。