27

在 PHP 中,我经常面临内存限制问题。尤其是像 Drupal 等高度资源集成的系统。

我想在这里知道的是:

  • 有非常高的 php 内存限制(如 2GB)是否很好?
  • 有什么大缺点吗?

编辑:

作为一个场景,例如在 Drupal 中,当我们通过 Web 面板(不是通过 Drush 或任何脚本)清除缓存时,它需要大量内存。因此,即使仅在这种情况下,我目前肯定需要大约 512MB 的上限。

4

3 回答 3

43

黄金法则:只为 PHP 提供 PHP 需要工作的东西,仅此而已。

这将防止您的系统不必要地阻塞 PHP 进程的情况,并且还将帮助您发现错误(占用 1GB 内存的脚本是不寻常的,并且提供 2GB 的内存限制将隐藏它)。


对于特殊情况,您知道单个脚本文件的内存非常大,您可以使用ini_set()在运行时更改内存限制指令。看到这个这个

于 2012-10-12T11:53:34.667 回答
4

No, the more is not the better. It's the amount of memory a single script is allowed to consume. If your server contains, say, 4GB of memory, only two scripts simultaneously could eat all that memory.

In general, PHP scripts should use little memory. Normally all memory a script reserves is freed when it terminates, but you can clean up memory before that by explicitly unsetting variables that are no longer needed during execution. That way, you can make your script more memory-efficient.

于 2012-10-12T11:55:58.850 回答
0

如果您知道脚本需要大量内存,那么将限制设置为高是非常安全的,并且需要。如果系统的可用内存量和其他正在运行的应用程序的限制设置为高,则可能会出现问题。

还要记住,如果内存限制为 64 MB 或类似的东西,可能会以无限循环处理某些数据的错误脚本通常会很快停止。在这种情况下,将内存限制设置为 4 GB 将使您的系统在无限循环中全速运行更长的时间,并可能导致您的整个系统变得无响应。

但是我有大型数据处理应用程序,其内存限制约为 2-4 GB,在具有 4-8 GB 内存的系统上没有任何问题。请注意,正如其他用户所述,这些应用程序是一个实例。如果您有运行多个脚本实例的应用程序(就像大多数 Web 应用程序一样),您会因为在每个实例中使用大量内存而遇到重大问题。您将耗尽内存,并且在释放内存之前,其他客户端将无法使用您的应用程序。

但不要只是增加内存限制来隐藏问题。检查为什么您的应用程序需要这么多内存,看看您是否可以先解决这个问题。

于 2012-10-12T11:55:43.717 回答