增加PHP memory_limit在什么时候变得疯狂?

问题描述

memory_limit作为服务器页面的Apache模块运行的PHP 的配置必须考虑到您在计算机上可以同时拥有多少个Apache进程- 请参阅MaxClientsApache 的配置选项。

如果MaxClients为100,并且您具有2,000 MB RAM,则非常快速的计算将显示您不应使用超过20 MB (因为20 MB * 100客户端= 2 GB或RAM,即服务器拥有的内存总量) 为memory_limit值。

而且这并没有考虑到同一台服务器上可能还有其他事情在运行,例如MySQL,系统本身……而Apache可能已经在为自己使用一些内存。

或者,当然,这也是“最坏的情况”,它认为每个PHP页面都在使用它可以使用的最大内存量。

在您的情况下,如果仅一项工作需要如此大的内存,那么我不会增加memory_limit作为Apache模块运行的PḦP 的内存。

相反,我会从命令行 (或通过cron作业) 启动该作业,并memory_limit在这种唯一的情况下指定更高的规格。

这可以通过-dphp选项来完成,例如:

$ php -d memory_limit=1GB temp.php
string(3) "1GB"

在这种情况下,考虑到temp.php仅包含:

var_dump(ini_get('memory_limit'));

在我看来,这比增加Apache的PHP模块的memory_limit安全得多-这是我在拥有大型数据集或无法优化或分页的繁重工作时通常会执行的操作。

如果需要为PHP CLI执行定义多个值,还可以通过以下选项告诉它使用另一个配置文件,而不是默认的php.ini -c

php -c /etc/phpcli.ini temp.php

这样,您就可以:

  • /etc/php.ini对于Apache,具有low memory_limit,low max_execution_time,…
  • /etc/phpcli.ini用于批量从命令行运行,几乎没有限制

这样可以确保您的批次能够运行-并且您仍将拥有网站的安全性(memory_limitmax_execution_time作为安全措施)

不过,如果您有时间优化脚本,则应该;例如,在这种情况下,您必须处理大量数据,分页是必不可少的;-)

解决方法

在我目前正在使用的系统中,有一个过程将大量数据加载到数组中以进行排序/聚合/处理。我知道此过程需要针对内存使用情况进行优化,但是从短期来看,它只是需要工作。

给定加载到数组中的数据量,我们不断达到内存限制。它已经增加了好几次,我想知道在某种程度上增加它通常是个坏主意吗?还是
取决于计算机具有多少RAM?

机器具有2GB的RAM,当前的memory_limit设置为1.5GB。我们可以轻松地向计算机添加更多RAM(并且无论如何都可以)。

其他人遇到过这种问题吗?有什么解决方案?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...