loadavg 变化不频繁,建议起一个 timer 定时读,然后缓存到 shdict 里面。access_by_lua_block 只要读缓存就行了,不需要让每个请求都读一遍。
在 2017年6月19日星期一 UTC+8下午2:55:44,Jay Tang写道:
我想在服务器负载高时禁止某个特定url访问。
帮忙看看以下每次读系统load会不会影响性能?或者有什么更好建议
access_by_lua_block {
local fp = io.open("/proc/loadavg","r")
local loadavg = fp:read("*all")
fp:close()
local loadavg5, err = ngx.re.match(loadavg, "[0-9]+")
if tonumber(loadavg5[0]) >= 20 then
ngx.log(ngx.ALERT, "System high load, limiting access. Current load is: " .. loadavg)
--todo, limit access.
end
}