![处理服务器上 CPU 高度密集的进程](https://linux22.com/image/680702/%E5%A4%84%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%20CPU%20%E9%AB%98%E5%BA%A6%E5%AF%86%E9%9B%86%E7%9A%84%E8%BF%9B%E7%A8%8B.png)
我在 Amazon EC2 上有一台 Windows 服务器(m4.2xlarge) 处理 Web 请求,使用应用程序 A 进行一些处理并返回结果。问题是,这个应用程序 A 占用大量 CPU,最终占用了 100% 的 CPU。这会产生两个问题 -
- 返回结果需要时间 [我完全同意]
- 由于 CPU 使用率几乎达到 100%,我的服务器无法处理后续的 Web 请求,并返回 Web 服务错误。[这就是问题所在] 我不希望任何 Web 服务调用被丢弃,它们延迟返回结果对我来说没问题。
我尝试降低应用程序 A 的 CPU 亲和力,但这对我没什么帮助。还有其他想法吗,比如有足够的 CPU 可用来处理 Web 请求,剩余的 CPU 用于处理应用程序 A。
PS 我对从一般服务器设置角度的答案感兴趣。不一定与 AWS 相关。
答案1
如果您的后端服务使用了所有 CPU,那么您有 3 个选择:
- 将您的应用程序移至具有更强大 CPU 的服务器。这可能会让您的 CPU 密集型进程更快完成。
- 将您的应用程序移至具有更多 CPU 或 CPU 核心的服务器。这将使您的前端应用程序在后端进程运行时获得一些 CPU 时间。
- 将流程划分到不同的服务器。将前端应用程序放在一台服务器上,将后端流程放在另一台服务器上。
长期,选项 3允许最好的可能性:
- 它允许您单独扩展应用程序。例如,如果需要,您可以添加更多后端工作程序,而无需添加更多前端工作程序。您还可以让一组
t2.medium
s 处理前端,而单个 sm4.2xlarge
处理后端。 - 它可以防止后端进程干扰前端进程。