如何根据 cpu/内存使用情况或挂起的请求返回 503 服务器繁忙?

Posted

技术标签:

【中文标题】如何根据 cpu/内存使用情况或挂起的请求返回 503 服务器繁忙?【英文标题】:How to return 503 server busy based on cpu/memory usage or pending requests? 【发布时间】:2011-11-07 13:55:34 【问题描述】:

我正在开发使用 jetty 和 jersey 进行 REST 的高性能 Web 应用程序。如果 CPU 负载、内存带宽或挂起的连接很高,我正在尝试找到返回 503 的最佳方法。

环顾网络,我没有找到太多关于如何操作的说明,在 Jetty 上几乎没有。

实现的方法是在servlet中使用代理、过滤器、代码?

【问题讨论】:

【参考方案1】:

这在很大程度上取决于你是什么操作系统。如果您使用的是 linux,那么基于 cpu/memory 添加 503 非常容易 - 使用 /proc/meminfo 和 uptime 来计算负载并按照您的意愿行事。至于挂起的连接,这更棘手,解决方案应该看 apache 级别(假设你是 apache)。

我的 2 美分。

【讨论】:

在什么级别(脚本/过滤器/代码)最好实现这一点?如果服务器很忙,它甚至可能无法访问返回 503 的代码。 好吧,如果您有高负载,我建议您设置适当的集群。然后平衡器将监视节点。如果没有节点可以为请求提供服务,它可以使用正确的消息将其退回。此外,您可能需要考虑使用 nginx - 它具有处理高负载情况的好方法。

以上是关于如何根据 cpu/内存使用情况或挂起的请求返回 503 服务器繁忙?的主要内容,如果未能解决你的问题,请参考以下文章

python multiprocessing.Pool kill *特定*长时间运行或挂起的进程

如何在不挂起的情况下返回并恢复我的应用程序?

AWR收集缓慢挂起的几种常见情况分析

AWR收集缓慢挂起的几种常见情况分析

AWR收集缓慢挂起的几种常见情况分析

应用退出或挂起时处理推送负载