2012-10-12 90 views
20

在PHP中,我經常遇到內存限制問題。特別是隨着資源高度集成的系統,如Drupal的,等PHP的memory_limit更好嗎?

我想知道這裏是:

  • 它是好事,有很高的PHP內存限制像2GB?
  • 是否有任何主要缺點?

編輯:

作爲一種情形,例如在Drupal,它需要這麼多的內存,而我們 CLEAR通過Web面板的高速緩存(未通過Drush或任何腳本)。所以即使只有 這種情況下,我當前肯定需要512MB左右的高限。

+4

總之,你的記憶限制應儘可能在你需要的範圍內儘可能低。內存限制適用於每個人同時執行腳本,而不是全局。將其設置爲低將有助於確保如果您犯了一些錯誤,例如導致一個無限循環,劇本將被儘早殺死,而不是失去控制,並使整個服務器停止。 – DaveRandom

+1

您需要多少內存來提供100個併發請求? 200GB? – JvdBerg

+5

@JvdBerg內存限制並未定義正在使用多少內存。這只是單個進程允許使用的限制。 – KingCrunch

回答

27

黃金法則:只給PHP PHP需要的工作,沒有什麼更多。

這將防止情況下,當您的系統上的PHP程序不必要的堵塞,也將協助您找到的bug(即需要1GB的內存腳本是不尋常的,並給予2GB內存的限制將隱藏) 。


對於特殊情況下,如果你想知道一個腳本文件是非常沉重的記憶,你可以使用ini_set()改變在運行時內存限制指令。見thisthis

+0

'編輯我的問題請.'所以哦上帝!現在我的系統正在放緩,因爲這個限制? (僅用於清除緩存過程)@ _ @ @ –

+1

@ 4lvin:編輯我的答案。 –

+0

謝謝。你甚至解決了兩個問題;) –

0

如果你有腳本,你知道需要大量的內存它是完全安全的,並且需要,設置極限高。如果針對可用的內存量和其他正在運行的應用程序將系統的限制設置爲高,則可能會出現問題。

另外請記住,如果內存限制爲64 MB或類似情況,可能以無限循環結束處理某些數據的錯誤腳本通常會停止很快。在這種情況下,將內存限制爲4 GB會讓系統在無限循環中全速運行,並且可能導致整個系統無響應。

但我已經有大型數據處理應用程序,內存限制爲2-4 GB左右,而在具有4-8 GB內存的系統上沒有任何問題。請注意,正如其他用戶所述,這些應用程序是一個實例。如果您的應用程序運行腳本的多個實例(如大多數Web應用程序那樣),則會在每個實例中使用大量內存,從而遇到主要問題。您將耗盡內存,進一步的客戶端將無法使用您的應用程序,直到內存被釋放。

但是,不要只提高內存限制來隱藏問題。檢查你的應用程序爲什麼需要那麼多的內存,看看你能否先解決這個問題。

5

不,越多越好。 這是一個單個腳本允許使用的內存量。如果您的服務器包含4GB內存,則只有兩個腳本可以同時使用所有內存。

一般而言,PHP腳本應該使用很少的內存。通常,腳本保留的所有內存在終止時都會釋放,但在此之前您可以清除內存,方法是明確執行期間不再需要的變量。這樣,您可以使腳本更加高效地存儲內存。

+0

只要你不總是使用全局變量,通常不需要'unset()'。 – KingCrunch

+0

@KingCrunch即使這不應該有所作爲應該嗎? 'global'在腳本執行的範圍內仍然是全局性的,它們不會在請求之間持續存在。還要注意''unset()'不能保證內存將被立即釋放,你還必須調用'gc_collect_cycles()' – DaveRandom

+0

'編輯我的問題請.'所以哦,上帝!現在我的系統正在放緩,因爲這個限制? (僅用於清除緩存過程)@ _ @ @ –