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