Назад | Перейти на главную страницу

Обработка процессов с высокой загрузкой ЦП на сервере

У меня есть сервер Windows на Amazon EC2 (m4.2xlarge), который обрабатывает веб-запросы, выполняет некоторую обработку с помощью приложения A и возвращает результаты. Проблема в том, что это приложение A сильно нагружает ЦП и в конечном итоге занимает до 100% ЦП. Это создает две проблемы -

  1. На возврат результатов требуется время [я полностью согласен с этим]
  2. Поскольку ЦП используется почти на 100%, мой сервер не может обрабатывать последующие веб-запросы и возвращает ошибку для веб-служб. [Это проблема] Я не хочу, чтобы вызовы веб-служб отбрасывались, они возвращают результаты поздно, меня устраивает.

Я попытался уменьшить привязку к процессору для приложения A, но это мне мало помогло. Любые другие идеи, такие как достаточно свободного ЦП для обработки веб-запросов, а оставшееся используется для обработки приложения A.

P.S. Меня интересует ответ с точки зрения общей настройки сервера. Не обязательно связано с AWS.

Если ваша внутренняя служба использует весь ваш процессор, у вас есть 3 варианта:

  1. Перенесите приложение на сервер с более мощным процессором. Это может ускорить завершение процесса, интенсивно использующего процессор.
  2. Перенесите приложение на сервер с большим количеством ЦП или ядер ЦП. Это позволит вашему клиентскому приложению получить некоторое процессорное время, пока ваш внутренний процесс работает.
  3. Разделите ваши процессы на отдельные серверы. Разместите интерфейсное приложение на одном сервере, а внутренние процессы - на другом.

Долгосрочный, вариант 3 позволяет использовать лучшие возможности:

  • Это позволяет отдельно масштабировать ваши приложения. Например, при необходимости вы можете добавить больше внутренних воркеров, не добавляя больше интерфейсных воркеров. Вы также можете иметь кучу t2.mediums обработка внешнего интерфейса, с одним m4.2xlarge на бэкэнде.
  • Это предотвращает вмешательство серверного процесса в интерфейсный.