Zend php memory memory_limit

Rep*_*tec 1 php memory zend-framework

所有,

我正在研究基于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

Pas*_*TIN 5

一般来说,使用PHP 5.2和/或PHP 5.3,我倾向于认为比超过32Mmemory_limit是"太多":

  • 使用Frameworks/ORM和类似的东西16M往往是不够的
  • 32M对我正在使用的那种网络应用程序(典型的网站)来说,使用通常就足够了
  • 使用超过64M意味着服务器将无法处理我们想要的尽可能多的用户.


当涉及脚本到达时memory_limit,通常的问题是尝试将太多数据加载到内存中; 几个例子:

  • 在内存中加载大文件,使用fileor file_get_contents或XML相关函数/类等函数
  • 创建太大的数据
  • 创建太多对象

考虑到您使用的是ORM,您可能会遇到以下情况:

  • 您正在执行一些返回大量行的SQL查询
  • 您的ORM正在转换对象中的每一行,将它们放在一个数组中
  • 在这种情况下,解决方案是加载更少的数据
    • 例如,使用分页
    • 或尝试加载数据数组而不是对象(我不知道这是可能的行走-但它与学说,所以也许行走有这样做太的一些方法是什么?)