PHP對可以使用多少內存有內置的限制嗎?換句話說,如果我有一臺擁有大量RAM的機器,並且改變了大部分內存,那麼腳本是否仍然會達到一些下限?PHP是否有固有的內存限制,超出了我設定的範圍?
(如果你很好奇,我們的目標是運行自動文檔生成,用PHP編寫的,一個非常大的PHP代碼庫。)
PHP對可以使用多少內存有內置的限制嗎?換句話說,如果我有一臺擁有大量RAM的機器,並且改變了大部分內存,那麼腳本是否仍然會達到一些下限?PHP是否有固有的內存限制,超出了我設定的範圍?
(如果你很好奇,我們的目標是運行自動文檔生成,用PHP編寫的,一個非常大的PHP代碼庫。)
PHP會消耗盡可能多的,因爲它有,這取決於你的操作系統。您無法將PHP的內存限制擴展到您的操作系統所能提供的範圍之外。
如果我理解正確,64位操作系統可以處理比32位更多的內存,對吧?所以如果我有一個64位的操作系統,PHP可以使用盡可能多的操作系統可以給它 - PHP本身不是32位? – 2010-07-23 11:22:23
只有當PHP被編譯爲64位二進制文件,否則它將被限制在3到3.5gig之間,這是32bit應用程序所能見到的最多的,因爲操作系統和硬件需要一些緩衝空間。即使是64位版本也是有限的,因爲處理器可能在內部是64位的,但是在地址總線上可用的位少一些。例如。 Athlon 64只有48位硬件尋址,提供256TB的限制。仍然巨大,但絕對不是完整的64位(16EB) – 2010-07-23 17:32:15
除了PHP ini directive memory_limit
之外,您只能使用機器的可用RAM。請注意0是每個腳本,所以同時運行多個腳本可能會導致比您的服務器更多的內存。
每個進程的最大內存量也可能受操作系統和/或一些可配置資源限制的限制。
E.g.在Windows系統上,每個進程的32位進程限制爲2/3/4 GB內存(取決於您是否使用64位版本的Windows以及IMAGE_FILE_LARGE_ADDRESS_AWARE的設置)。一個64位進程也可能被限制爲2GB(清除IMAGE_FILE_LARGE_ADDRESS_AWARE)。
在Linux系統上有類似的限制,通常通過ulimit設置限制。
你應該計劃你的軟件,以便它可以擴展。隨着文檔的增長,你不能將RAM大小增加到無限大。考慮並優化,以便在任何基礎上腳本可以消耗常量(即使它很大)內存塊。例如,讓您的生成器雙向傳遞並緩存文件中第一遍的結果。 – 2010-07-23 11:31:49
@FractalizeR - 很好的建議。碰巧,我正在使用一個現有的文檔生成器,但它是開源的,所以如果有必要的話,我可以嘗試修改它,就像你說的那樣。我不確定我能夠做到這一點,買我可以嘗試。同時,我確實有一臺內存很大的機器,所以我只想投入資源,看看它是否能完成這項工作。 – 2010-07-23 11:41:00