簡體   English   中英

Zend PHP內存memory_limit

[英]Zend php memory memory_limit

所有,

我正在基於Zend Framework的Web應用程序上工作。 我們一直在開發服務器上遇到內存不足的錯誤:

允許的XXXX字節內存大小已用盡(嘗試YYYY ...

我們在php.ini中不斷增加memory_limit,但現在已超過1000兆。 正常的memory_limit值是多少? php / Zend中常見的懷疑內存不足的東西是什么? 我們正在使用Propel ORM。

感謝您的所有幫助!

更新我無法在Windows環境中重現此錯誤。 如果將memory_limit設置為低(例如16M),則會出現相同的錯誤,但是“嘗試分配”的數量始終是合理的。 例如:(嘗試分配13344字節)如果我在(Fedora 9)服務器上將內存設置得很低(例如16M),則會得到相同的結果。 一致,合理的內存不足錯誤。 但是,即使在我們的服務器上將內存限制設置得很高(例如128M),也許每周一次,我也會收到一個瘋狂的巨大內存錯誤:(試圖分配1846026201字節)。 我不知道這是否可以進一步說明正在發生的事情。 我們正在使用propel 1.5。 聽起來實際的版本將在本月晚些時候發布,但是看起來其他任何人都不會遇到這個問題。 我不知道Propel是問題所在。 我們正在Linux機器上使用Zend Server和php 5.2,在本地使用5.3。

還有其他想法嗎? 我有一張票可以在Linux機器上安裝Xdebug。

謝謝,

-rep

一般來說,在PHP 5.2和/或PHP 5.3中,我傾向於認為memory_limit的“太多”超過了32M

  • 使用Frameworks / ORM之類的東西, 16M通常是不夠的
  • 通常,對於我正在使用的Web應用程序(典型的網站)而言,使用32M就足夠了
  • 使用64M意味着服務器將無法處理我們想要的盡可能多的用戶。


當腳本到達memory_limit ,通常的問題是試圖將過多的數據加載到內存中。 幾個例子:

  • 使用諸如filefile_get_contents類的函數或與XML相關的函數/類將一個大文件加載到內存中
  • 創建太大的數據數組
  • 創建太多對象

考慮到您正在使用ORM,您可能處於以下情況:

  • 您正在執行一些SQL查詢,該查詢返回很多行
  • 您的ORM正在轉換對象中的每一行,並將它們放入數組中
  • 在這種情況下,解決方案是加載較少的數據
    • 例如使用分頁
    • 或嘗試將數據加載為數組而不是對象(我不知道Propel是否可以實現-但Doctrine確實可以,所以Propel也可以這樣做嗎?)

您的應用程序在內存不足時到底在做什么。 可能有很多原因。 我會說最常見的是將過多的數據分配給數組。 您的應用程序是否按照這些原則做任何事情?

您發生了兩種情況之一,也許兩者都有:

  1. 您有一個失控的過程,在某個時候它並沒有結束。
  2. 您擁有一些算法,這些算法會拋出大量數據,例如巨大的字符串,數組或對象,並且正在制作不必要的副本,而不是僅處理所需的內容並丟棄不需要的內容。

我認為這與巡航控制系統的部署有關。 當有人部署新代碼時(或剛部署新代碼后),我只會收到非常高的內存錯誤(按演出順序)。 由於錯誤總是指向“ require_once”行,因此這也有一點意義。 每次收到錯誤時:致命錯誤:第2行/directory/file.php中的內存不足(已分配4456448)(試圖分配3949907977字節)

我將“ require_once”行替換為:class_exists('Ingrain_Security_Auth')|| require('Ingrain / Security / Auth.php');

到目前為止,我已經將該行替換為3個文件,並且沒有其他內存問題。 任何人都可以對可能發生的事情有所了解嗎? 我正在使用Cruise Control進行部署。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM