如何获得更小的负载平均值分辨率(

如何获得更小的负载平均值分辨率(

我正在尝试构建一个服务,如果服务器过载,该服务会阻止其他请求。但是 1 分钟的平均负载对此还不够好,逻辑是这样的:

if load_average > core_count 
   return render 503
end
return the_requested_page

但是当我尝试使用命令给计算机施加压力时stress -c 12 -i 100 --timeout 10,load_average 显示如下内容:

1, 3, 8, 15, 21, 20, 18, 15, 12, 11 
              ^ stress program ends here

如何获得较小分辨率的平均负载(1-2秒,而不是1分钟平均)?

额外信息,我使用这个读取平均负载代码

答案1

平均负载是在内核中计算的 - 请参阅为什么 Linux 负载计算中不使用简单的 1/5/15 分钟移动平均值?了解详情。因此,您不能仅仅获得更高分辨率的读数。相反,你可以编写复制功能的用户空间代码,但这似乎有点棘手(尤其是因为要正确执行,您必须进行大量采样,这对于过载的服务器来说似乎是愚蠢的开销)。

相反,我建议选择除平均负载之外的其他东西来作为您决策的基础——可能是您从服务本身中了解的东西。例如,如果响应时间超过中值阈值,那么要后退怎么办?

相关内容