關於PHP配置之memory_limit參數的設定


PHP5中,對於memory_limit的設定已經從以往的8M擴大到128M的上限。

對於配置中的定義解釋是:

    memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)

    最大單線程的獨立內存使用量。也就是一個web請求,給予線程最大的內存使用量的定義。

現有的大部分網站或者論壇應用中,應用軟件的配備一般都是以如下的形式搭建:

 

    Nginx(Apache)+PHP+Memcache+Mysql

 

對於以上的應用軟件的采用,優點我就不再多說。但對於Memcache的使用就是為了減少對於數據庫的訪問的頻率的降低,也是提高服務響應的一種辦 法。但是對於memcache和數據庫的數據存儲有區別的是,memcache的數據並不是以上數據的形式存儲在內存中,而是抽象化了之后以字符的形 式,hash表的形式存儲在內存之中。這樣的存儲區別導致,每次memcache的數據抽取必須全部數據反序擬化一次,將所有的數據導入進獨立的單一線程 中,然后第二部才是進行過濾和抽取你所需要的數據。

在應用過程中,如果是讀取數據庫的數據,大家應該知道,優化的辦法應該是在SQL語句中比保證第一次過濾盡量是提高准確性,只取需要的字段,不要全部所有字段取出之后再在應用中過濾得到自己想要的字段,這樣對於服務器的負載會有本質的區別。

 

如果采用memcache,必然做不到數據庫在在第一次就精確過濾這點目標。那么就需要在開始設計表的同時就需要考慮到這點,盡量保證被memcache數據表盡量保證數據的較少,可以多分表來完成。

 

memory_limit的內存分配,標配是128M。

一旦獨立的線程超過了128M,那PHP會報錯:

    Fatal error: Allowed memory size of 33554432 bytes

對於8G內存的服務器,如果同時並發的響應達到50,每個都是128M的峰值,那估計也是服務器會卡死的時候。

 

盡量降低128M的內存配置,如果調整至64M,服務器的負載基本能下降一半左右,如果能調整至32M效果更好。

但是對於應用的要求就更高,很多表建立初期就沒有考慮到這個問題,如果你要采用memcache作為數據的存儲,必須提前完成優化數據表的設計部署,降低獨立線程PHP的內存使用量,服務器的響應和負載降低的就不僅僅是幾個百分點的效果了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM