繁体   English   中英

Apache KeepAlive 在 API 服务器上

[英]Apache KeepAlive on API Server

I have a LAMP server (Quad Core Debian with 4GB RAM, Apache 2.2 and PHP 5.3) with Rackspace which is used as an API Server. 根据我们的设置,我想知道 Apache 的最佳 KeepAlive 选项是什么。

  • API 服务器托管单个 PHP 文件,该文件以普通 JSON 响应。 这是一个相当大的文件,它执行一些 MySql 读/写和相当多的 Memcache 查找。
  • 我们有大约 90 个客户在任何时候都登录到系统中。
  • 大约 1/3 的客户将处于空闲状态。
  • 在活动客户端(大约 60 个)中,它们每 3 秒向 API 发送一个请求。
  • 客户端每 15 或 20 分钟左右从活动状态切换到空闲状态,反之亦然。

启用 KeepAlive 后,服务器会发疯,memory 峰值接近 4GB(交换已启用等)。 在 KeepAlive 关闭的情况下,memory 大小为 3GB,但我注意到 Apache 不断地杀死并创建新进程来处理每个连接。

所以,我的三个选择是:

  1. KeepAlive On 和 KeepAliveTimeout Default - 在这种情况下,我想我只需要获得更多 RAM。
  2. KeepAlive On 和 KeepAliveTimeout Low(可能是 10 秒?)如果 KeepAliveTimeout 设置为 10 秒,客户端是否会通过以 3 秒的定期间隔访问资源来保持与该进程的持续连接? 当该客户端空闲超过 10 秒时,该进程是否会被终止? 如果是这样,我猜选项 2 看起来是 go 的最佳选项?

  3. KeepAlive Off这显然最适合 RAM,但是由于为每个请求设置新进程所涉及的工作,它会影响响应时间吗?

哪个选项最好?

看起来您的 php 脚本正在泄漏 memory。 在使它们长时间运行之前,您应该掌握这一点。

如果您对每个请求的 memory 使用情况以及从请求到请求添加 memory 不是一个真正的解决方案没有一个好主意。 它现在可能会有所帮助,并在下周再次中断。

我将继续运行单独的进程,直到 memory 管理得到控制。 如果您目前有响应问题,最好的选择是添加另一台服务器来分散负载。

您应该检查的第一件事是客户端是否真的在使用 keepalive 功能。 我不确定您所说的“API 服务器”是什么意思,但如果它是某种 Web 服务,那么(IME)使用 keepalives 实现表现良好的客户端相当困难。(请参阅 mod_log_config 的 %k 指令)。

另外,我们真的需要知道您的目标和限制是什么? 性能/容量/低成本?

这是在 HTTP 或 HTTPS 上运行 - 延迟有很大差异。

我会说 10 秒的保活时间高得离谱 - 一点也不低。

即使您有 90 个客户端保持打开的连接,4Gb 似乎也是相当大量的 memory 供他们使用 - 我运行具有 150-200 个并发连接到复杂 PHP 脚本的系统,使用大约 0.5Gb 超过静止使用。 你的 250 + 90 x 20M 的数字只给你大约 2Gb 的足迹(我知道不是那么简单 - 但它并不复杂)。

对于您给出的数字,我不希望有任何好处-但 memory 占用空间要大得多-使用超过 5 秒的时间来保持活动。 您可能可以使用 2 秒的 keepalive 时间而不会显着损失吞吐量,但是没有什么可以替代测量各种配置的有效性 - 并分析数据以找到最佳配置。

当然,如果您发现您的客户能够利用 keepalives 并从中获得可观的收益,那么您需要找到适应这种情况的最佳方式。 使用线程服务器可能对 memory 的使用有所帮助,但您可能会发现在网络服务器前运行反向代理会带来更多好处 - 特别是 SSL。

除此之外,您还可以通过正常的调优获得显着的好处——代码分析、output 压缩等。

您应该考虑将 Apache 切换到基于事件或线程的 MPM,您可以在其中轻松使用KeepAlive On并将Timeout值设置为高,而不是管理KeepAlive设置,这在 3 个选项之间的特定情况下显然没有真正的优势。

我会 go 还考虑在 Windows 上切换到 Apache。 这里的好处是它的 MPM 完全基于线程,并利用 Windows 对线程的偏好而不是进程。 您可以在 1-2GB 的 RAM 上使用 KeepAlive On 和 3-10 秒的超时轻松执行 512 个线程。

WampDeveloper Pro - Xampp - WampServer

否则,您唯一的其他选择是将 MPM 从Prefork切换到 Worker...

Or to Event (which also got better with Apache 2.4)... http://httpd.apache.org/docs/2.2/mod/event.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM