在PHP中,我经常面临内存限制问题。特别是像Drupal等高资源集成系统
我想知道的是:
编辑:
作为一种情况,例如在Drupal中,它需要我们这么多的记忆 通过Web Panel清除CACHE(不是Drush或任何脚本)。所以即使是 仅此情况下,我肯定需要目前约512MB的高限制。
答案 0 :(得分:31)
黄金法则: 只向PHP提供PHP需要工作的内容,仅此而已。
这可以防止系统不必要地阻塞PHP进程,并且还可以帮助您查找错误(一个占用1GB内存的脚本是不寻常的,并且提供2GB的内存限制将隐藏它)。
对于特殊情况,如果您知道单个脚本文件的内存很重,则可以使用ini_set()
在运行时更改内存限制指令。请参阅 this 和 this 。
答案 1 :(得分:5)
不,越多越好。 它是单个脚本允许使用的内存量。如果你的服务器包含4GB内存,那么同时只有两个脚本可以占用所有内存。
通常,PHP脚本应该使用很少的内存。通常,脚本保留的所有内存在终止时都会被释放,但您可以在此之前通过显式unset
执行期间不再需要的变量来清理内存。这样,您可以使脚本更具内存效率。
答案 2 :(得分:0)
如果你有知道的需要大量内存的脚本,那么将极限设置为高是绝对安全的。如果系统关于可用内存量和其他正在运行的应用程序的限制设置为高,则可能会出现问题。
另外请记住,如果内存限制为64 MB或类似的话,可能最终处于无限循环中处理某些数据的错误脚本通常会很快停止。在这种情况下,将内存限制设置为4 GB会使系统在无限循环中以完全倾斜的方式运行更长时间,并可能导致整个系统无响应。
但我已经拥有大数据处理应用程序,内存限制大约为2-4 GB,而在具有4-8 GB内存的系统上没有任何问题。请注意,如其他用户所述,这些应用程序是一个实例。如果您的应用程序运行多个脚本实例(就像大多数Web应用程序那样),那么在每个实例中使用大量内存会遇到重大问题。您将耗尽内存,在释放内存之前,其他客户端将无法使用您的应用程序。
但是,不要只是提高内存限制来隐藏问题。检查为什么你的应用程序需要大量内存,看看你是否可以先纠正它。