在尝试编写应用(openresty 作为代理)时,在较大并发压力下观察到 502 的响应,调试后最终发现即使移除全部逻辑,只运行一个较长时间的循环同样能复现问题。
access_by_lua_block {
local sum = 0
for i = 1, 1.0e7 do
sum = sum + i
end
}
进行并发压力测试的具体方式为发起大量 keep-alive 连接,每个连接发起一次 http 请求后挂起。
应用代码和测试代码导致的问题在日志中都反映为
"upstream prematurely closed connection while reading response header from upstream"。
access_by_lua
是否在设计上不应该运行较费时的逻辑?还是说这个问题是什么配置错误导致的?