我移植一个大型网络应用程序以共享网络主持的环境。该应用程序是写在PHP4.新的环境有PHP5.2.

由于某些原因,该申请是漏出大量的存储器中运行时PHP5.2.我可以从字面上看存储使用过的屋顶使用memory_get_usage(),直至达到极限值的64兆字节(这是非常慷慨的共享环境中,网站使用的运行有12或16MB PHP4).

我怀疑这是一个副作用的一些东西改变了在PHP5,最有可能处理的对象引用的论点。然而,搜索特定的行为(s),原因(s)泄漏是极其困难为应用程序非常复杂,部分原因是没有很好地写的(是的,这是我).

作为程序上安装了一个共享空间,我不能使用古典的调试设施(尽我知道)。我会非常、非常希望避免重新创建的环境地,因为我工作上的项目从字面上的所有天的一些时间。

所以我的问题是:

  • 有没有人知道的典型。PHP4=>5过渡的缺陷,尤其是在处理大量的对象,这可能是因为我的泄漏(s)

  • 有没有人知道某种调试器的独立、脚本"的形范围转储"的工具的使用的变量PHP,可能会帮助我找出哪些变量是吃了这些大量的记忆?

有帮助吗?

解决方案

为解决这个问题,我将:

  1. 配置文件的脚本xdebug+wincachegrind(或一些其他profiler)和/或firephp.
  2. 打开严格的模式,以获得所有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功能中的关键的当地人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top