关于PHP的内存使用情况

时间:2013-03-01 09:14:56

标签: php apache

我在Windows + Apache上的PHP应用程序停止显示“内存不足(分配422313984)(试图分配45792935字节)”。

我无法理解为什么它停止了,因为我的机器有4GB的物理内存,我在PHP.ini文件中设置了memory_limit指令-1。我也重新启动了Apache。

我认为4GB足以分配超过422313984 + 45792935字节内存。

是否有其他设置为PHP或Apache使用内存?

我还总结了性能计数器。它显示MAX内存占用总量为2GB。 httpd进程使用了​​1.3GB。

我无法显示代码,但实际上代码从DBMS获取30000行,每行199字节,并在循环中使用simplexml_load_string()解析为XML。

如果代码数据很小或者缩短循环项(如30000到1000),代码通常会完成。

另一种情况是启动Apache后第一次运行将成功。

我认为会发生一些内存泄漏。

实际上我做了回显PHP_INT_SIZE而PHP显示了4.所以也许我的PHP是32位版本。

如果内存使用问题来自这个版本的PHP,如ÁlvaroG。Vicario指出的那样,我可以通过更改64位版本的PHP来修复它吗?我怎样才能获得64位版本的PHP for Windows?我在http://windows.php.net

中找不到它

1 个答案:

答案 0 :(得分:3)

«内存不足»消息(不要与«允许的内存大小耗尽»混淆)总是表明PHP解释器字面上耗尽了内存。没有PHP或Apache设置可以调整 - 计算机无法为PHP提供更多RAM。常见原因包括:

  • 使用太多内存的脚本。
  • PHP解释器中的内存泄漏或错误。

SimpleXML绝不是轻量级扩展。相反,它的易用性和便利功能需要付出高昂的代价:高资源消耗。即使没有看到一行代码,我也可以确保SimpleXML完全不适合创建包含30,000个项目的XML文件。使用2GB RAM的PHP脚本只能关闭整个服务器。

没有人喜欢在项目中间更改基础库,但您最终还是需要这样做。 PHP提供了一个名为XMLWriter的拉解析器。它实际上并没有那么难用,它提供了两个好处:

有了它,我确信您的2 GB脚本可以运行几MB。