我設置了memory_limit to -1
。我仍在解決內存問題。PHP內存問題
我正在使用遺留系統,這是遺憾的編碼(:))。我跑apache的基準來檢查系統
AB -n2000 -c100 http://......com/
在日誌文件中我看到這麼多的內存相關的問題併發用戶訪問。
在代碼中它們使用對象緩衝。這可能是問題? object buffering
與memory_limit
有關嗎?
我設置了memory_limit to -1
。我仍在解決內存問題。PHP內存問題
我正在使用遺留系統,這是遺憾的編碼(:))。我跑apache的基準來檢查系統
AB -n2000 -c100 http://......com/
在日誌文件中我看到這麼多的內存相關的問題併發用戶訪問。
在代碼中它們使用對象緩衝。這可能是問題? object buffering
與memory_limit
有關嗎?
更改PHP上的內存限制可防止它在超過某個值時被殺死。但是,它並沒有爲您的硬件提供更多內存(或交換)。最終,如果它需要你沒有身體的記憶,那麼事情就會破裂。
在PHP中的對象緩衝:我不知道它是什麼意思,如果你的意思是輸出緩衝與ob_start和ob_stop它不涉及對象緩衝,並沒有真正影響PHP的內存使用。
PHP的內存使用情況取決於在構建請求的響應時創建的對象的大小。 如果您執行多次相同的請求,每個php執行的內存使用量應該是相同的。
對內存使用的'沒有限制'你做的唯一的事情是避免請求崩潰,因爲太多的內存使用。這意味着如果您的問題是索引頁面上的內存使用情況,您可以通過在此設置中設置一些值來輕鬆測試它,然後減小到崩潰(64Mo,32Mo,16Mo,8Mo等)。你不需要那個。
現在,當您使用ab時,您會讓您的apache服務器響應多個並行請求。對於每個PHP請求,您都會創建一個新的Apache進程。而這個新的apache進程將執行一個獨立的PHP事物,並且它將花費與其他進程做同樣的事情相同數量的內存(因爲您請求相同的頁面,並且不同PHP執行之間不共享任何內容,並且每個PHP執行是在一個Apache進程中完成的)。
我假設你正在使用apache與mpm_prefork和mod_php,而不是任何php-fpm或fastcgi php。
所以如果你在這種情況下有內存問題這可能是你允許過多的apache。默認情況下,它是150,如果每個進程需要30Mb的RAM(檢查頂部),那麼它會使30 * 150 = 4.3Go。看到問題了嗎?
3級簡單的解決辦法
,之後的其他解決方案更復雜
所以,如果我使用4GB RAM,並且對於1000個用戶,它只使用2Gb RAM。將memory_limit設置爲-1是否值得? – Sahal
取決於你的操作系統,你的配置等等。其他應用程序/守護程序也需要內存;) – KingCrunch