最近我的应用程序开始抛出有关最大允许内存耗尽的致命错误。经过一些研究,我发现限制是在.htaccess
文件中设置的,它设置为64米。
尝试过的分配大约是80MB,我们能够提供这些资源,但是我想问一下社区是否增加这个变量的值是一个很好的解决方案。 非常感谢你
答案 0 :(得分:1)
答案取决于你的脚本在做什么:)听起来你的情况增加很小(从64到80 MB,我建议坚持2的功能,并将其增加到128MB顺便说一句。 )所以它不应该对现代机器产生太大影响。但要知道这是否正确,你需要找出为什么你需要更多的记忆。
如果您的处理只需要更多内存(例如,您正在处理内存中的上传文件,或解码大型json或xml结构或执行其他内存密集型操作),那么提高您的限制是正常的。
但是,如果您的应用程序存在内存泄漏或以低效方式写入,那么提高内存限制只是掩盖问题而不解决问题。你可能会继续遇到这个问题并最终一直在增加内存,这是不可行的。
如果您不知道导致内存消耗突然增加的原因,我建议您使用例如xhprof。您还可以查看应用程序的最后几个更改,看看可能导致它的原因。如果你可以证明它是合理的,那么给你的脚本更多的内存,否则首先尝试优化你的代码。
答案 1 :(得分:1)
PHP的部署方式通常是PHP进程为多个请求提供服务。在单个请求期间,脚本现在可以分配内存。最后这个记忆将是免费的。到现在为止还挺好。现在,大多数操作系统都是以保留内存的方式构建的,即使在释放时也会将内存分配给进程。假设有一个已编程的所需内存一次将需要再次使用该数量,并且将其保留在该过程中比将其恢复更便宜。因此,在PHP部署中,可能会发生一个请求占用大量内存,然后内存绑定到进程并且不再可用于系统。此外,如果某个进程占用的内存比预期多得多,则可能表示存在错误。所以对于这两件事,memory_limit充当安全网。
如果您的应用程序需要更多内存,通常可以增加限制。 绝对最大值取决于系统(available RAM
/ number of worker processes
可能是一个粗略的公式,粗略的,因为它不包括其他所需的内存。通常你应该只增加需要的金额。
当然,在更改此设置时,您必须记住何时转移到其他系统。通常,内存使用量越少意味着执行速度越快,因此您应该尝试查看是否可以优化代码。
旁注:我故意简化了上面的内存模型,忽略了虚拟内存页面以及操作系统如何优化它们