PHP 内存管理

标签 php memory memory-leaks memory-management

我的 LAMP Web 应用程序中有一些耗时且(可能)占用大量内存的功能。这些函数中的大部分将通过 cron 每分钟执行一次(在某些情况下,cron 作业将执行这些函数的多个实例)。

由于内存是有限的,我不想在尝试执行环境无法再处理的功能时遇到问题。 什么是处理潜在内存问题的好方法?

我猜我需要确定我可以使用多少内存,每个函数在执行它之前需要多少内存,确定 cron 正在执行哪些其他函数及其内存用法等。

另外,我不想遇到某个函数以某种方式获得执行优先于其他函数的问题。如果有任何优先级,我想以某种方式控制它。

最佳答案

您可以研究缓存技术,例如 APC它可以让您将内容直接写入 RAM,以便您可以快速访问它,如果您不想重复执行 mysql 查询等昂贵的任务。

我能想到的一个缓存示例是,您可以缓存电子邮件,而不是从电子邮件服务器一次又一次地检索它们。如果您的脚本中有一些东西要保留以供下次脚本执行时使用,但如果您的脚本每次执行时都做独特的事情,那么基本上 ram 缓存是一种非常有用的技术,那将是无用的。同样对于 contoll,您可以在每次脚本执行时调用 memory_get_usage() 并将该值写入 apc 缓存,以便每个 cron 都可以检索该值并查看是否有足够的可用内存来完成。

至于平均使用量,您可以编写一个数组,最后让我们说 100 次函数执行,当您再次调用该函数时,它可以从 ram 中 apc_fetch 并计算该函数的平均内存使用量,然后将其与多少 ram 进行比较现在正在使用,然后决定是否开始。此外,它可以将该估计值写入当前内存使用变量,以防止运行其他脚本。在该函数的末尾,您再次从变量中减去该数量。 tl;博士: 查看 apc_fetch、apc_store 和 memory_get_usage 函数

关于PHP 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3335255/

相关文章:

文件迭代中的 PHPExcel 日期问题

javascript - 如何使用AJAX调用包含的php文件?

javascript - 使用 AJAX 将数据从 Javascript 移动到 PHP

javascript - 浏览器内存随着 javascript ajax 调用不断增加

java - 了解幸存世代指标

Javascript removeChild内存泄漏?

php - Magento 自动将对象保存为 EAV 值

ios - 在使用 Mono Touch 的循环中使用 CGImage.ScreenImage 时出现内存问题

android - 无法使用 LibGDX Net 在 Android 上下载 100mb 文件

angularjs - IE 11 抛出没有足够的存储空间来完成此操作