2012-05-29 29 views
3

我是一家大公司的開發人員,他有一些遺留代碼,需要在導出功能上使用大量的內存。爲了解決這個問題,ini_set('memory_limit','4G');用來。PHP耗盡4GB的限制,但不是2GB?

問題是,腳本崩潰,內存繁瑣。如果我將限制設置爲2G,腳本運行到最後。它甚至不會達到1GB峯值內存使用量。

由於代碼已經過版本控制並與公司的其他人員共享,所以我無法更改限制,並且在本地安裝時更改它非常麻煩。

我的問題是:什麼可以使腳本崩潰與4GB的限制,但不是2GB?

PS:我的設置是運行Debian的虛擬機,它使用nginx和php-fpm。 VM有4GB內存(雖然改變這似乎沒有任何區別)。


[更新]

創建一個新的虛擬機與64位操作系統,如果我設置VM存儲器爲2GB它的工作原理。 (如果我使用4GB它不)。 由於我確定2GB,我會關閉這個問題。

+0

你在ini中改變了'maximum_execution_time'嗎? – jugnu

回答

3

這是一個自然的限制:2或甚至4 Gbs的地址空間用於文件映射也需要一些內存頁面。

最終的解決方案是使用64位PHP解釋器(如果可能的話,切換到64位系統)。

+0

好的提示64位系統。我會嘗試創建一個新的虛擬機,看看它是否有效。 – upsfeup

1

也許你在一個32位系統?

那麼如果你的VM只有4GB,那麼你可能應該給它更多的內存。

1

在32位系統上4GB是內存空間的限制。我猜想當PHP試圖獲得4GB內存時,可能會有一些內存違規。