【问题标题】:PHP Memory Cleared when using exit()?使用exit()时清除PHP内存?
【发布时间】:2013-02-02 07:12:15
【问题描述】:

我的网络应用程序通过 AJAX 对我的 PHP 脚本进行大量 POST 和 GET 调用。我注意到在导出到 PDF/excel、搜索、插入/更新/删除等时调用我的脚本后,我的服务器的内存使用量达到了相当低的水平。

我的 PHP 脚本都没有以 exit()die() 结尾。这会导致我的记忆问题吗?如果我在每个脚本的末尾添加exit()die(),这会清除该给定脚本刚刚使用的内存吗?

【问题讨论】:

  • 您使用什么库来导出 PDF 和 Excel ——我怀疑这些库比 PHP 本身更有可能是罪魁祸首。
  • 我使用 TCPDF 进行 PDF 导出...我不使用库来导出 Excel
  • 当脚本退出时,PHP 已经清理了使用的内存。仅仅因为你的代码没有明确的 exit() 或 die() 调用并不意味着服务器会神奇地保持它以某种方式运行。

标签: php ajax apache memory-leaks exit


【解决方案1】:

我认为exit()die() 不会有任何不同。

请确保释放数据库资源(结果集、连接等...)。此外,请考虑您使用的所有扩展,并确保它们都没有已知的内存泄漏错误,尤其是在您使用外来扩展时。

如果您使用的是 Linux,并且即使“可用内存”为“低”,您的服务器也没有在磁盘上进行交换,这可能是由于磁盘缓存。在这种情况下,一切都很好。请参阅:linuxatemyram.com.
顺便说一句,您从哪里获得有关空闲内存的信息?

【讨论】:

  • LOL...喜欢那个网站,它真的很有意义。我以为我的“免费”内存是 16 MB,而实际上,在阅读了那个网站之后,我发现我还有 360 MB 的空闲空间。我正在使用命令free -m 来查看我当前的使用情况
  • 我接受了这个答案,因为它让我意识到我是多少 Linux 新手,而且我真的没有 PHP 引起的内存问题!非常感谢!
【解决方案2】:

这不是 PHP 问题,它是 Apache 功能。

当 apache 启动一个新进程来处理您的请求时,它不会在您的请求被处理后立即释放其资源,而是对任何可能的未来请求保持可用。

如果你使用 'top' 命令,你会看到多个 apache 进程正在运行。

在这里阅读:http://abdussamad.com/archives/169-Apache-optimization:-KeepAlive-On-or-Off.html

【讨论】:

    【解决方案3】:

    exitdie 与到达文件末尾基本相同。析构函数运行,ob_start 级别刷新并结束,所有关闭函数都运行。

    然而,在任何 PHP 进程结束时,该进程就像任何其他程序一样结束。没有留下任何记忆。

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2011-07-09
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多