php - 关于PHP的内存使用

标签 php apache

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

我不明白为什么它会停止,因为我的机器有 4GB 物理内存并且我在 PHP.ini 文件中为 -1 设置了 memory_limit 指令。我还重新启动了 Apache。

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

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

我还总结了性能计数器。它显示机器的最大内存使用量为 2GB。而 httpd 进程使用了​​ 1.3GB。

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

如果数据比较小,或者把循环次数缩短到30000到1000,代码正常结束。

还有一种情况是Apache启动后第一次运行会成功。

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

实际上我确实回显了 PHP_INT_SIZE 并且 PHP 显示了 4。‖所以也许我的 PHP 是 32 位版本。

如果内存使用问题来自此版本的 PHP,如 Álvaro G. Vicario 在下面指出的那样,我可以通过更改为 64 位版本的 PHP 来修复它吗?我怎样才能获得适用于 Windows 的 64 位版本的 PHP?我在http://windows.php.net里找不到

最佳答案

«Out of memory» 消息(不要与 «Allowed memory size exhausted» 消息混淆)总是表示 PHP 解释器字面意义上的内存不足。没有可以调整的 PHP 或 Apache 设置——计算机无法为 PHP 提供更多的 RAM。常见原因包括:

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

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

没有人喜欢在项目进行到一半时更改基础库,但您最终需要这样做。 PHP 提供了一个名为 XMLWriter 的拉式解析器。 .它使用起来并不难,而且有两个好处:

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

关于php - 关于PHP的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154203/

相关文章:

Apache mod_ssl 日志客户端证书

apache - Apache Tomcat 中的 Angular2 路由无法使用重定向

php - Web 脚本找不到已安装的包/软件 (CentOS)

php - RegEx - 排除注释的 PHP 代码块

Apache 2.4.x 在 RHEL 6.4 上手动构建和安装

php - .htaccess 拒绝所有,包括 htaccess 文件和显示 404 - 我该怎么做?

ruby-on-rails - 2 个事件的 Rails 应用程序,1 个 Apache/乘客服务器?

javascript - 使用 jQuery 检查复选框值时出错

php - 将字段转换为时间戳以进行比较

php - 如何在 magento 中实现自定义 REST API?