0

我们有一个旧的 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

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

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

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

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

4

2 回答 2

2

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

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

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

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

跳这有帮助。

于 2013-02-07T10:53:19.617 回答
0

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

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

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

作曲家.json:

"zendframework/zendframework": "2.0.0", 
于 2013-02-11T09:02:51.043 回答