Php高内存使用率


Php high memory usage

我们有一个旧的facebook应用程序,运行平稳,使用原生php编写。

本月,我们决定在zend框架2中重写它。昨天,在切换到新的应用程序后,我们的服务器出现了大量内存不足的错误。所以我们又回到了旧的应用程序。

我安装了xdebug来评测应用程序。使用memory_get_peak_usage()函数,我注意到内存使用率很高。

在旧的应用程序中,静态页面只使用1MB内存。但新的一个使用7-8mb大约在同一页上。

以下是webgrind的前两行:

   Function                                     Invocation Count    Total Self Cost    Total Inclusive Cost
   Composer'Autoload'ClassLoader->loadClass     224                 23.31       47.20
   Composer'Autoload'ClassLoader->findFile      224                 9.57        10.23

还尝试了thaapache的ab工具

   ab -n 50 -c 5 -C PHPSESSID=SESSIONID http://myhost.com

结果是:

   Percentage of the requests served within a certain time (ms)
   50%    368
   66%    506
   75%    601
   80%    666
   90%   1073
   95%   1812
   98%   2278
   99%   2278
   100%   2278 (longest request)

所有这些结果都来自生产服务器,而不是本地主机。

单页7-8 mb正常吗?如果没有,我该如何减少?我应该在zf2或composer中查找它吗?

如果你需要,我可以提供代码样本。非常感谢。

当您将解决方案从本机迁移到Zend时,您必须了解Zend的工作方式。

Zend由许多类组成,当您使用Objects而不是原生/轻型结构时,使用的内存会增加。

要提高内存使用率,请检查代码并执行以下操作:

  • 将一些代码封装在函数中,可以帮助垃圾回收器从内存中删除未使用的对象
  • 在打印之前不要将大量的对象列表存储在数组中,只需动态打印即可
  • 限制在循环中创建对象(调用"new")

跳这个有帮助。

我花了一天时间来解决这个问题。尝试了xdebug,xhprof。代码中没有问题。

我们切换回2.0.0版本,问题解决了。我不知道新版本出了什么问题,现在坚持2.0.0版本。

总体内存使用量约为4mb,没有崩溃。

composer.json:

"zendframework/zendframework": "2.0.0",