用於運行PHP作爲Apache模塊服務器網頁的memory_limit
的配置必須考慮到有多少Apache進程,你可以在同一時間在機器上 - 看到的Apache MaxClients
配置選項。
如果MaxClients
爲100並且您有2,000 MB或RAM,則非常快速的計算將顯示您不應該使用超過20 MB *(因爲20 MB * 100客戶端= 2 GB或RAM,即總數你的服務器有內存)*爲memory_limit值。
這是沒有考慮到有可能是在同一臺服務器上運行,例如MySQL,系統本身,......其他的東西,Apache是否可能已經在使用一些內存本身。
或課程,這也是一個「最壞的情況」,即認爲每個PHP頁面使用的最大內存量就可以了。
在你的情況,如果你需要的內存這麼大的量只有一個作業,我不會增加memory_limit
爲PHP運行的Apache模塊。
相反,我會從啓動命令行(或通過cron作業)那份工作,而在這其中,只有指定的情況下更高的memory_limit
specificaly。
這可以用PHP的-d
選項來完成,如:
$ php -d memory_limit=1GB temp.php
string(3) "1GB"
考慮,在這種情況下,temp.php只包含:
var_dump(ini_get('memory_limit'));
在我看來,這是比增加Apache模塊的PHP模塊的memory_limit更安全 - 這就是我通常在做大數據集時所做的事情,或者一些非常重的東西,我無法優化或分頁。
如果您需要爲PHP CLI執行時定義幾個值,你也可以告訴它使用而不是默認的PHP其他配置文件。INI,與-c
選項:
php -c /etc/phpcli.ini temp.php
這樣一來,您有:
/etc/php.ini
爲Apache,低memory_limit
,低max_execution_time
...
- 和
/etc/phpcli.ini
的批次從命令運行 - 線,幾乎沒有限制
這確保您的批次將能夠運行 - 而且你會還有安全爲您的網站(memory_limit
和max_execution_time
是安全措施)
不過,如果你要優化你的腳本,你應該時刻;例如,在那種需要處理大量數據的情況下,分頁是必須的;-)
老實說,你不應該關心設置內存限制,而是要弄清楚你的內存泄漏的位置並修復它。這不是一個增加memory_limit的解決方案,它避免了代碼中的問題。看看你正在設置哪些對象並取消設置值以清除泄漏。 – Petrogad 2009-09-15 04:42:53
你能具體說明數據量嗎?你的意思是什麼? – jergason 2009-09-15 04:43:23
@Frederico:OP並沒有試圖解決內存泄漏問題,他正在尋求處理PHP中非常大的數據集的解決方案。 – arul 2009-09-15 04:49:17