我有一台带有Rackspace的LAMP服务器(Quad Core Debian,4GB RAM,Apache 2.2和PHP 5.3),用作API服务器。我想知道在我们的设置下,Apache的最佳KeepAlive选项是什么。
随着KeepAlive On,服务器疯狂,内存峰值接近4GB(交换等)。 使用KeepAlive Off,内存为3GB,但我注意到Apache不断杀死并创建新进程来处理每个连接。
所以,我的三个选择是:
KeepAlive On和KeepAliveTimeout低(可能是10秒?)如果KeepAliveTimeout设置为10秒,客户端是否会通过访问常规资源3来保持与该进程的持续连接第二个间隔?当该客户端空闲超过10秒后,该过程会被杀死吗?如果是这样,我猜选项2看起来是最好的选择?
KeepAlive Off 这显然最适合RAM,但是由于为每个请求设置新流程所涉及的工作,它会对响应时间产生影响吗?
哪个选项最好?
答案 0 :(得分:0)
看起来你的php脚本正在泄漏内存。在使它们长时间运行之前,你应该掌握它。
如果您不了解每个请求的内存使用情况,并且从请求添加内存请求不是一个真正的解决方案。它现在可能会有所帮助,下周会再次破裂。
我将继续运行单独的进程,直到内存管理得到控制。如果您目前有响应问题,最好的办法就是添加另一台服务器来分散负载。
答案 1 :(得分:0)
您应该检查的第一件事是客户端是否实际上正在使用keepalive功能。我不确定你的'API服务器'是什么意思,但如果它的某种web服务然后(IME)使用keepalive很难实现表现良好的客户端。(请参阅mod_log_config的%k指令)。
另外,我们真的需要知道你的目标和限制是什么?性能/容量/低成本?
这是通过HTTP还是HTTPS运行 - 延迟有很大差异。
我已经说过10秒的保持时间非常高 - 一点也不低。
即使你有90个客户端保持连接打开,4Gb似乎是一个相当大的内存供他们使用 - 我运行的系统有150-200个并发连接到复杂的PHP脚本,使用大约0.5Gb而不是休息用法。您的250 + 90 x 20M的数字仅为您提供了大约2Gb的足迹(我知道并不是那么简单 - 但它并不复杂得多)。
对于你给出的数字,我不会期望任何好处 - 但显着更大的内存占用 - 使用超过5秒的keepalive。您可能使用2秒的保持活动时间而没有任何显着的吞吐量损失,但是无法替代测量各种配置的有效性 - 并且分析数据以找到最佳配置。
当然,如果您发现您的客户能够利用Keepalive并从中获得可衡量的收益,那么您需要找到适应这种情况的最佳方式。使用线程服务器可能会对内存使用有所帮助,但您可能会发现在Web服务器前运行反向代理会带来更多好处 - 尤其是SSL。
除此之外,您可以通过正常调整获得显着的好处 - 代码分析,输出压缩等。
答案 2 :(得分:-2)
您应该考虑将Apache切换到基于MPM的事件或基于线程的MPM,而不是管理KeepAlive
设置,这些设置在3个选项之间的特定情况下没有明显的优势。{{ 1}}并将KeepAlive On
值设置为高。
我还会考虑在Windows上切换到Apache。这里的好处是它的MPM完全基于线程,并利用Windows对线程而不是进程的偏好。在1-2GB的RAM上,你可以轻松地使用KeepAlive On和Timeout 3-10秒来完成512个线程。
WampDeveloper Pro - Xampp - WampServer
否则,您唯一的其他选择是将MPM从Prefork切换到Worker ... http://httpd.apache.org/docs/2.2/mod/worker.html
或者事件(使用Apache 2.4也变得更好)...... http://httpd.apache.org/docs/2.2/mod/event.html