提前为新手问题道歉,但我有一个专用的虚拟服务器,我正在使用它有 512MB 的 RAM 内存。我最近将 memory_limit 从默认的 128M 更改为 256M。我有什么理由不想把它一直提升到可用的完整 512M 吗?
我有什么理由不想把它一直提升到可用的完整 512M 吗?
是的 - 第一个是每个 PHP 进程512MB 。您的流程真的需要那么多吗?
我可以想出的一些原因尚未涵盖:
设置这么高的限制只会鼓励笨拙的编程(如果你一次需要半个内存,我无法想象 PHP 会是最好的选择)
潜在的拒绝服务攻击(例如,如果您在内存中进行上传处理,并且用户知道这一点,他们只会上传一些非常大的文件并使您的服务器脱机 - 而不是您的服务器达到 32/64/128M,它会一路打到512M)。这是假设您没有其他未首先达到的上传限制。
你有一个虚拟服务器。如果它是 OpenVZ/Virtuozzo 并且您不能突破到超过 512M,那么您的进程将开始被杀死 - 很快。Apache 可能会脱机,尤其是在使用 dso 时。这将把一切都放下,直到它重新启动。
在问题开始浮出水面之前,您不会知道这是否会导致重大问题。与更复杂的内存管理不同,PHP 在开始时不会尝试分配这么多内存。它只是说它会一直尝试,直到你尝试使用更多,然后放弃。就您所知,您一开始可能无法获得接近 512MB 的任何空间 - 所以您不能仅仅因为您已经重新启动 Apache 并且一切仍然有效就假设您很好。
假设您确实有一个需要 512M 内存的应用程序。为什么也要对所有其他进程设置这个限制?您可能会为所有这些人带来上述问题。使用标准安装,需要它的脚本(例如大型 cron 作业)可以ini_set('memory_limit','512M');
在 PHP 中完成并提高它自己的限制。这让所有其他进程“安全”
以下是一些更底层的原因:
您的整个虚拟服务器分配了 512M。必须将其划分为进程以保持服务器运行,例如(至少)
不可能在总内存 512M 内压缩所有这些其他进程和 512M PHP 进程。
最重要的是,内核会将未使用的 ram 优化到缓存中- 因此不小心设置高限制会导致无缘无故的性能损失。
确认您是否有交换(使用top
或验证free -m
)。如果这样做,当您达到限制时,您的虚拟服务器将显着变慢。如果您没有交换,您的进程将被管理程序杀死。无论哪种方式,您都会看到性能下降。
所以,总而言之,我不建议为这样的事情提高全局限制。
归档时间: |
|
查看次数: |
3437 次 |
最近记录: |