PHP的內存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in...

Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in...

 解釋是可用內存已耗盡,這關係到PHP的memory_limit的設置問題。

這裏有兩種方法解決

1、修改php.ini

memory_limit = 128M

這種方法需要重啓服務器,很顯然,此方法對虛擬機有限制。

2、通過ini_set函數修改配置選項值

ini_set ('memory_limit', '128M')  


----------------

 

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的內存使用量,服務器的響應和負載降低的就不僅僅是幾個百分點的效果了。

 

轉自:PHP的內存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章