Назад |
Перейти на главную страницу
Обработка процессов с высокой загрузкой ЦП на сервере
У меня есть сервер Windows на Amazon EC2 (m4.2xlarge), который обрабатывает веб-запросы, выполняет некоторую обработку с помощью приложения A и возвращает результаты. Проблема в том, что это приложение A сильно нагружает ЦП и в конечном итоге занимает до 100% ЦП. Это создает две проблемы -
- На возврат результатов требуется время [я полностью согласен с этим]
- Поскольку ЦП используется почти на 100%, мой сервер не может обрабатывать последующие веб-запросы и возвращает ошибку для веб-служб. [Это проблема] Я не хочу, чтобы вызовы веб-служб отбрасывались, они возвращают результаты поздно, меня устраивает.
Я попытался уменьшить привязку к процессору для приложения A, но это мне мало помогло. Любые другие идеи, такие как достаточно свободного ЦП для обработки веб-запросов, а оставшееся используется для обработки приложения A.
P.S. Меня интересует ответ с точки зрения общей настройки сервера. Не обязательно связано с AWS.
Если ваша внутренняя служба использует весь ваш процессор, у вас есть 3 варианта:
- Перенесите приложение на сервер с более мощным процессором. Это может ускорить завершение процесса, интенсивно использующего процессор.
- Перенесите приложение на сервер с большим количеством ЦП или ядер ЦП. Это позволит вашему клиентскому приложению получить некоторое процессорное время, пока ваш внутренний процесс работает.
- Разделите ваши процессы на отдельные серверы. Разместите интерфейсное приложение на одном сервере, а внутренние процессы - на другом.
Долгосрочный, вариант 3 позволяет использовать лучшие возможности:
- Это позволяет отдельно масштабировать ваши приложения. Например, при необходимости вы можете добавить больше внутренних воркеров, не добавляя больше интерфейсных воркеров. Вы также можете иметь кучу
t2.medium
s обработка внешнего интерфейса, с одним m4.2xlarge
на бэкэнде. - Это предотвращает вмешательство серверного процесса в интерфейсный.