存储器泄漏过渡PHP4到5分的任何提示?
-
21-09-2019 - |
题
我移植一个大型网络应用程序以共享网络主持的环境。该应用程序是写在PHP4.新的环境有PHP5.2.
由于某些原因,该申请是漏出大量的存储器中运行时PHP5.2.我可以从字面上看存储使用过的屋顶使用memory_get_usage(),直至达到极限值的64兆字节(这是非常慷慨的共享环境中,网站使用的运行有12或16MB PHP4).
我怀疑这是一个副作用的一些东西改变了在PHP5,最有可能处理的对象引用的论点。然而,搜索特定的行为(s),原因(s)泄漏是极其困难为应用程序非常复杂,部分原因是没有很好地写的(是的,这是我).
作为程序上安装了一个共享空间,我不能使用古典的调试设施(尽我知道)。我会非常、非常希望避免重新创建的环境地,因为我工作上的项目从字面上的所有天的一些时间。
所以我的问题是:
有没有人知道的典型。PHP4=>5过渡的缺陷,尤其是在处理大量的对象,这可能是因为我的泄漏(s)
有没有人知道某种调试器的独立、脚本"的形范围转储"的工具的使用的变量PHP,可能会帮助我找出哪些变量是吃了这些大量的记忆?
解决方案
为解决这个问题,我将:
- 配置文件的脚本xdebug+wincachegrind(或一些其他profiler)和/或firephp.
- 打开严格的模式,以获得所有php错误+通知。
这样做,你将能够:
- 优化你的代码。(除去的错误/警告/通知可能加速你的代码)
- 清理你的代码。(使用适当的php5对象的语法可以只是很好的性能)。
对象模型完全改变。PHP4到PHP5.肯定的是,严格的方式将告诉你,你不应该用明确的"通过参考"。
其他提示
一个常见的一个我发现在一个释放的5.2是,strtotime泄漏,而不memory_get_usage捕。改strptime固定的问题。
有一个错误报告,这对于5.2.8- http://bugs.php.net/bug.php?id=46889.
没有调试器,你可以打开一个脚本,你认为使用多存储器,并把memory_get_usage功能中的关键的当地人。
不隶属于 StackOverflow