AWS文档提到以下内容:
为确保负载均衡器负责关闭与您的实例的连接,请确保您设置的 HTTP 保持活动时间值大于负载均衡器上的空闲超时设置。
我面临的一个问题是,我的 ELB 正在触发大约 40 个请求(js、css、img),每个请求都启用了 KeepAlive,它用完了我所有的工作线程并阻止它们 KeepAliveTimeout(我按照建议将其设置为高于 ELB 超时)。
但是,页面加载完成后,ELB 不会关闭连接 - 它们只是坐在那里阻止工作人员,直到超时。
所以这里我面临两个问题:
- 为什么 ELB 会触发 40 个不同的连接而不是重用同一个连接?
- 为什么 ELB 在处理完连接后不清理连接?
答案1
您是在 EC2 级别还是 ELB 级别启用粘性会话?是否启用了粘性?注销时间是多少?是否启用了连接耗尽?
- 如果未启用粘性会话,ELB 通常将启动新会话。
- 如果您在 ELB 上启用粘性会话,则您正在等待 ELB 级别的连接。建议在 EC2 级别启用粘性会话,以防 EC2 实例发生故障,自动扩展将被迫启动新实例。这消除了“如果会话处于活动状态但我的 EC2 实例已死亡怎么办?”的问题。
“如果处于空闲状态,Amazon ELB 目前会在 60 秒内使持久套接字连接超时。这种情况对于在后端 EC2 生成大型文件(PDF、报告)并将其作为响应发送回去并在整个生成过程中保持连接空闲的用例来说是一个问题。”