全部,
我正在开发基于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
答案 0 :(得分:5)
一般来说,对于PHP 5.2和/或PHP 5.3,我倾向于认为32M
memory_limit
超过16M
是“太多”:
32M
通常是不够的64M
通常足以支持我正在处理(典型网站)的网络应用 memory_limit
意味着服务器将无法处理尽可能多的用户。
当涉及到达file
的脚本时,通常的问题是尝试将太多数据加载到内存中;几个例子:
file_get_contents
或{{1}}等函数或与XML相关的函数/类加载内存中的大文件考虑到您使用的是ORM,您可能会遇到以下情况:
答案 1 :(得分:0)
您的应用程序在内存不足时究竟做了什么。这可能有很多原因。我会说最常见的是为数组分配太多数据。您的应用程序是否按照这些方式执行任何操作。
答案 2 :(得分:0)
你发生了两件事中的一件,也许两件事:
答案 3 :(得分:0)
我认为这与巡航控制部署有关。当有人部署新代码时(或者只是在部署新代码之后),我只获得非常高(按演出的顺序)内存错误。这也有点意义,因为错误总是指向一行“require_once”。每次我收到错误: 致命错误:第2行的/directory/file.php内存不足(分配4456448)(试图分配3949907977字节)
我已将“require_once”行替换为: class_exists('Ingrain_Security_Auth')||要求( '阿利/安全性/ Auth.php');
到目前为止,我已在3个文件中替换了该行,并且没有任何内存问题。任何人都可以了解可能发生的事情吗?我正在使用Cruise Control进行部署。