用于运行PHP作为Apache模块服务器网页的memory_limit
的配置必须考虑到有多少Apache进程,你可以在同一时间在机器上 - 看到的Apache MaxClients
配置选项。
如果MaxClients
为100并且您有2,000 MB或RAM,则非常快速的计算将显示您不应该使用超过20 MB *(因为20 MB * 100客户端= 2 GB或RAM,即总数你的服务器有内存)*为memory_limit值。
这是没有考虑到有可能是在同一台服务器上运行,例如MySQL,系统本身,......其他的东西,Apache是否可能已经在使用一些内存本身。
或课程,这也是一个“最坏的情况”,即认为每个PHP页面使用的最大内存量就可以了。
在你的情况,如果你需要的内存这么大的量只有一个作业,我不会增加memory_limit
为PHP运行的Apache模块。
相反,我会从启动命令行(或通过cron作业)那份工作,而在这其中,只有指定的情况下更高的memory_limit
specificaly。
这可以用PHP的-d
选项来完成,如:
$ 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,低memory_limit
,低max_execution_time
...
- 和
/etc/phpcli.ini
的批次从命令运行 - 线,几乎没有限制
这确保您的批次将能够运行 - 而且你会还有安全为您的网站(memory_limit
和max_execution_time
是安全措施)
不过,如果你要优化你的脚本,你应该时刻;例如,在那种需要处理大量数据的情况下,分页是必须的;-)
老实说,你不应该关心设置内存限制,而是要弄清楚你的内存泄漏的位置并修复它。这不是一个增加memory_limit的解决方案,它避免了代码中的问题。看看你正在设置哪些对象并取消设置值以清除泄漏。 – Petrogad 2009-09-15 04:42:53
你能具体说明数据量吗?你的意思是什么? – jergason 2009-09-15 04:43:23
@Frederico:OP并没有试图解决内存泄漏问题,他正在寻求处理PHP中非常大的数据集的解决方案。 – arul 2009-09-15 04:49:17