【问题标题】:Best practises to stop memory leaks and improve performance阻止内存泄漏和提高性能的最佳实践
【发布时间】:2009-07-18 11:56:32
【问题描述】:

简单地说,我是一个相当新的 PHP 编码器,我想知道是否有人可以指导我找到提高代码性能以及阻止那些讨厌的内存泄漏的最佳方法,我的主机就是其中之一'没有安装 APC 或类似设备,所以都必须手动编码 -_-

【问题讨论】:

    标签: php performance memory-leaks


    【解决方案1】:

    我认为普通的内存泄漏(例如忘记处理对象或字符串)在 PHP 中并不常见,但资源泄漏通常是常见的。我遇到了以下问题:

    • 数据库连接——你真的应该打电话给pg_close/mysql_close/etc。当你完成连接时。虽然我认为 PHP 的连接池可以缓解这种情况(但可能有其自身的问题)。

    • 图片——如果你使用gd2扩展打开或创建图片,你需要image_destroy这些,否则它们会永远占用内存。而且图像的数据量往往很大。

    请注意,如果您的脚本作为纯 CGI(无 HTTP 服务器模块)运行,那么当脚本退出时资源将被有效地清理。但是,在脚本运行时可能仍然存在内存问题,尤其是在图像的情况下,在单个脚本执行中执行许多操作并不少见。

    【讨论】:

      【解决方案2】:

      一般来说,php 脚本不会泄露内存。 php 运行时管理其脚本的所有内存。脚本本身可能会泄漏内存,但这会在 php 进程结束时被回收。由于 php 主要用于处理 http 请求,并且这些请求通常运行时间很短,因此如果您正在泄漏一些内存,这不会成为问题。因此,只有在您将 php 用于非 http 任务时,内存泄漏才真正关心您。与内存使用相比,性能应该是您更关心的问题。使用诸如xdebug 之类的工具来分析您的代码。

      【讨论】:

      • 尽管我很想使用 xdebug,但我确实提到我的主机不允许安装额外的但谢谢 :)
      • 我不会在生产环境中安装 xdebug。将其安装在您的开发者机器上。
      • 我在我的进程中观察到一个泄漏,脚本退出后内存没有被回收。当然,最有可能归咎于 PHP。
      • @Artem:泄漏更有可能发生在扩展或链接库中。你应该尝试隔离bug,然后一一禁用扩展,找到罪魁祸首。
      猜你喜欢
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      相关资源
      最近更新 更多