我想增加某些PHP腳本允許的內存。無論我做什麼,比如這個:PHP不能使用300MB的RAM
ini_set('memory_limit', '512M');
...劇本總是在大約300MB內存用完:
Fatal error: Out of memory (allocated 25165824) (tried to allocate 343810589 bytes) in \\Foo\phpQuery\phpQuery.php on line 255
我已經通過驗證的幾個意味着memory_limit
實際上改變。這個問題似乎是PHP無法物理分配總共300 MB的內存(25165824 字節+ 343810589 字節= 352 MB)。
我都試過PHP/5.3.0和PHP/5.3.9在兩個不同的基於Windows的計算機具有以下規格:
- 的Windows XP/Windows Server 2003中(兩臺計算機都32搭配1GB或RAM)位箱
- 官方PHP 32位VC9二進制
- 運行作爲Apache 2.2的模塊(第三方32位VC9二進制文件)
據我所知,物理RAM的使用一半將強制swa並將事情放緩,但我只需確保腳本實際運行,以便將其部署到實時服務器。我也嘗試了更大的值(處理相同的錯誤)和更小的值(使我的腳本達到極限或使Apache崩潰)。
什麼可以是這種明顯的硬編碼內存限制的來源?
更新#1:我已經使用Windows Server 2003框(它實際上是一個VMWare虛擬機)做了進一步的測試。我已將「物理」RAM增加到2 GB,並且我已驗證分頁文件允許增長到1152 MB。任務管理器顯示當前事務負載爲886 MB,並且有1,5 GB的空閒物理內存。不過,我收到的與的數字完全相同。
更新#2:正如我所說的,memory_limit
指令是好的。它出現在ini_get()
和phpinfo()
中。你得到的錯誤信息與我的稍有不同;我的表示一個PHP 崩潰。請比較:
Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate 343810589 bytes)
我會嘗試編寫一個腳本來重現問題並報告回來。
如果PHP試圖一次抓取那麼多內存,那麼我假設你正在嘗試加載一個文件....嘗試將文件加載到塊中而不是一次加載 – 2012-01-31 11:17:00
«如果無法優化,購買更多內存......»呃,有時候這是錯誤的......; )你確定你需要所有的記憶嗎? 300MB已經是一個巨大的數量。也許你可以優化你的腳本有點... – Macmade 2012-01-31 11:17:22
你是100%確定操作系統有超過300MB的可用內存分配? – DaveRandom 2012-01-31 11:17:45