在服务器上处理CPU密集型进程

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

  1. 回报的结果需要时间[我绝对可以这样做]
  2. 由于CPU几乎被使用到100%,我的服务器无法处理后续的Web请求,并返回错误的Web服务。 [这是问题]我不希望任何Web服务调用被丢弃,他们返回结果迟了对我来说是好的。

我尝试减less应用程序A的CPU亲和力,但这并没有太大的帮助。 任何其他的想法,如有足够的CPU免费处理的Web请求,其余的是用于处理的应用程序A.

PS我感兴趣的是从一般服务器设置的angular度来看的答案。 不一定与AWS有关。

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

  1. 将您的应用程序移到具有更强CPU的服务器上。 这可能会让您的CPU密集型进程更快完成。
  2. 将应用程序移动到具有更多CPU或CPU核心的服务器。 这将允许您的前端应用程序获得一些CPU时间,而您的后端进程正在工作。
  3. 把你的进程分成不同的服务器。 将您的前端应用程序放在一台服务器上,将后端进程放在另一台服务器上。

长期来看, 选项3允许最佳的可能性:

  • 它允许您分开扩展您的应用程序。 例如,如果需要,您可以添加更多的后端工作人员,而无需增加更多的前端工作人员。 你也可以有一大堆t2.medium处理前端,在后端有一个m4.2xlarge
  • 它可以防止后端进程干扰您的前端进程。