2013-02-07 197 views
0

我们有一个旧的Facebook应用程序,运行流畅写在本地PHP。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) 

所有这些从生产服务器不结果本地主机。

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

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

+0

步骤通过与调试器的应用程序。在这些速率下,应该很明显的是,连续100次被称为/实例化的原因并不存在。 –

回答

0

我花了一天的时间找出问题。试过xdebug,xhprof。代码中没有问题。

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

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

composer.json:

"zendframework/zendframework": "2.0.0", 
2

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

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

为了提高内存的使用,检查你的代码并执行以下操作:

  • 包裹函数一些代码,它有助于垃圾收集器从内存中删除未使用的对象。
  • 在打印数组之前,不要在数组中存储大量的对象列表,而是要即时打印。
  • 限制在循环中创建对象(调用'new')。

跳这有助于。