我有一台装有 lampp 堆栈和基于 php 的软件的服务器。这台服务器的内存非常低,不幸的是,我现在无法更改或增加内存。至少短期内无法。
低内存对性能的影响非常明显。服务器交换量很大。
由于一些依赖关系,短期内无法从 apache 更改为另一个 http 服务器。
在同一台服务器中,nginx 用作带有缓存的反向代理是否可以作为提高性能的替代方法?
我以前在其他设置中使用过 nginx,成功率很高。但这次我的能力非常有限。这个解决方案的好处是,它可以让 apache 不再提供静态内容,但另一方面,nginx 也会消耗内存,使本来就很慢的系统变得更加缓慢。
答案1
这极大程度上取决于服务器的具体工作负载以及它为什么消耗如此多的 RAM。
如果您的 PHP 脚本生成的内容本质上是静态的(并且您已设置适当的缓存控制标头),以便缓存代理实际上可以重用生成的内容,那么它可能会起作用(也可能不起作用)。如果不是,您只会给内存增加更多负担。
一般来说,如果你的资源严重受限,切换网络服务器并不是解决这一问题的灵丹妙药。解决内存不足的方法是增加更多内存...
答案2
缓存无论如何都会使用内存(Apache 也可以这样做),那么这样做有什么好处呢?最多可以提高性能,你可以设置 nginx 来提供静态内容,而将动态内容代理到 Apache。当然,如果:
- 您的网站上有足够多的静态内容,这可以证明这一点;
- 内存使用量取决于 Apache 线程数(并发用户),而不是少数占用大量内存的脚本。
您可能还想首先尝试降低 Apache 中的最大线程数和备用线程数,这可能会使您的网站反应稍慢,但如果您稍微调整一下并且没有突然的使用量激增,那么就应该没问题。
答案3
您可以在工作模式下使用 Apache(而不是 prefork),无需 mod_php,并在 FPM 池中使用 PHP。
Apache 将使用小线程而不是大进程(包含 mod_php)来提供静态内容,并且 FPM 池将仅提供动态内容。
此配置还允许您在不同的虚拟主机中使用不同的 php 版本和配置。