Php高内存使用率

时间:2013-02-07 10:45:37

标签: php performance memory-leaks zend-framework2 composer-php

我们有一个旧的Facebook应用程序,运行顺利用本机php编写。

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

我安装了xdebug来分析应用程序。使用memory_get_peak_usage()函数我发现内存使用率很高。

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

这是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

还尝试了apache的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)

所有这些都来自生产服务器而不是localhost。

单页正常是7-8 MB吗?如果没有,我该如何减少它?我应该在zf2还是作曲家中寻找它?

如果需要,我可以提供代码示例。谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

要改善内存使用,请检查您的代码并执行以下操作:

  • 将一些代码包装在函数中,它可以帮助垃圾收集器从内存中删除未使用的对象。
  • 在打印之前不要将大型对象列表存储在数组中,即可快速打印。
  • 限制在循环中创建对象(调用'new')。

跳这有帮助。

答案 1 :(得分:0)

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

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

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

composer.json:

"zendframework/zendframework": "2.0.0",