处理服务器上 CPU 高度密集的进程

处理服务器上 CPU 高度密集的进程

我在 Amazon EC2 上有一台 Windows 服务器(m4.2xlarge) 处理 Web 请求,使用应用程序 A 进行一些处理并返回结果。问题是,这个应用程序 A 占用大量 CPU,最终占用了 100% 的 CPU。这会产生两个问题 -

  1. 返回结果需要时间 [我完全同意]
  2. 由于 CPU 使用率几乎达到 100%,我的服务器无法处理后续的 Web 请求,并返回 Web 服务错误。[这就是问题所在] 我不希望任何 Web 服务调用被丢弃,它们延迟返回结果对我来说没问题。

我尝试降低应用程序 A 的 CPU 亲和力,但这对我没什么帮助。还有其他想法吗,比如有足够的 CPU 可用来处理 Web 请求,剩余的 CPU 用于处理应用程序 A。

PS 我对从一般服务器设置角度的答案感兴趣。不一定与 AWS 相关。

答案1

如果您的后端服务使用了所有 CPU,那么您有 3 个选择:

  1. 将您的应用程序移至具有更强大 CPU 的服务器。这可能会让您的 CPU 密集型进程更快完成。
  2. 将您的应用程序移至具有更多 CPU 或 CPU 核心的服务器。这将使您的前端应用程序在后端进程运行时获得一些 CPU 时间。
  3. 将流程划分到不同的服务器。将前端应用程序放在一台服务器上,将后端流程放在另一台服务器上。

长期,选项 3允许最好的可能性:

  • 它允许您单独扩展应用程序。例如,如果需要,您可以添加更多后端工作程序,而无需添加更多前端工作程序。您还可以让一组t2.mediums 处理前端,而单个 sm4.2xlarge处理后端。
  • 它可以防止后端进程干扰前端进程。

相关内容