当前位置: 首页 > 面试题库 >

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

袁赞
2023-03-14
问题内容

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

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

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

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


问题答案:

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作为安全措施)

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



 类似资料:
  • 问题内容: 我试图找出“最佳做法”,以确定是否要添加自动递增的整数作为表的主键。 假设我有一个表格,其中包含有关化学元素的数据。每个元素的原子序数是唯一的,并且永远不会改变。因此,与其对每列使用一个自动递增的整数,不如仅使用原子序数会更有意义,对吗? 如果我有一本书,那会是真的吗?我应该使用ISBN还是自动递增的整数作为主键?还是包含每个人的SSN的员工表? 问题答案: 关于Stack Overf

  • 在我们的生产系统中,我可以看到下面的事情发生在一个网络渠道未来: 在channelfuture之后。等待不间断(10秒)返回,两个通道都是未来。isDone()和channelfuture。isSuccess()返回false。我想知道在什么情况下会发生这种情况? channelFuture附加了一个消息发送操作(客户端)。Tcpump显示服务器端的窗口大小为0。 提前感谢。

  • 本文向大家介绍什么时候用delegate,什么时候用Notification?相关面试题,主要包含被问及什么时候用delegate,什么时候用Notification?时的应答技巧和注意事项,需要的朋友参考一下 答:delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,recieve

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 何时加载静态变量,运行时或编译时?有人可以解释一下吗? 我非常感谢您的帮助。 谢谢。 问题答案: 它们在运行时加载。 静态表示:该变量属于该类,而不属于该类的实例。因此,每个静态变量只有一个值,如果您有该类的n个实例,则没有n个值。

  • 问题内容: 谁能告诉我以下原因的原因以及如何解决? 我有一个带有ORDER BY子句的MySQL查询,如下所示。 因此,应按其“有效”等级对结果进行排序,如下所示。 但是,正如您在此处的我的页面上所看到的那样,这是在错误地订购它们,然后给我这个。 显然,第一排应该不存在。 更多信息.. 问题答案: 关于从无符号整数中减去是一个已知的问题。 默认情况下,整数值之间的减法(其中一个的类型为UNSIGN