use*_*145 4 keepalive mpm-prefork apache-2.2
今天我们在服务器上遇到了一个问题,文件/脚本的加载时间超过了 3 秒。解决方案很简单 - 只需将 MaxClients 增加到估计的内存限制即可。但我担心该解决方案的可扩展性,它似乎不太可靠——如果负载稍微增加,问题会再次出现。
我们正在开发的网络服务的性质——小型在线游戏——要求我们嵌入 AJAX 机制,该机制每 15 秒发送一个信标,指示客户端在线。
让我们想象以下设置。Apache 2 (mpm_prefork), MaxClients = 150, KeepAlive = on, KeepAliveTimeout = 5. 有300个用户在线。我的理解是否正确 - 如果所有 300 个用户将同时发送一个信标(仅通过使用 POST 检索信标.php 脚本) - 前 150 个客户端将几乎立即得到答案,而其他 150 个客户端将不得不等待 5 秒才能得到一个回答?
还有第二个问题。在我的情况下,最好的解决方案是什么?完全禁用保持活动?
apache 2 中的 MaxClients 是将在所有 apache 进程中提供的最大并发请求数。对于 prefork mpm,这也是将同时运行的最大 apache 进程数以及与您的 Web 服务器的最大开放传入网络连接数。
KeepAlive 的重点是减少访问站点时为每个 HTTP 请求启动新 TCP 连接的开销,因为每个新页面可能需要数十个文档(初始 html、css、javascript、图像等)。最终结果是页面加载速度更快。
MaxKeepAliveTimeout 指示 Web 服务在关闭连接之前将等待来自空闲客户端的附加 hHT 请求多长时间,使其能够为新的传入连接提供服务。
在您的情况下,如果您有 150 个客户端在启用 KeepAlive 的情况下同时发送信标,那么是的,在其他用户可以信标之前还需要 5 秒。假设要求每 15 秒发送一个信标,即最大并发用户数为 450。
解决方案:
您可以将 MaxKeepAliveTimeout 减少到 2 秒,增加时收益递减。最大的好处是初始页面加载,并且这些请求之间几乎没有延迟。
您可以完全禁用 KeepAlive,增加所有页面的加载时间,假设大多数用户在游戏中花费的时间最多。
必须在客户端和服务器端启用 keepalive 才能使用。假设您控制客户端 javascript,可以使用以下方法在客户端禁用特定请求的 keepalive:
connection.setRequestProperty("Connection", "close");
Run Code Online (Sandbox Code Playgroud)同样,您可以通过操作 Connection 响应标头来禁用服务器端特定 http 请求的 Keepalive。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |