Я работаю в системе Linux с Java JVM, которые создают новые потоки (процессы) для обработки рабочей нагрузки. Сложность потоков не может быть предсказана заранее, и некоторые потоки в итоге выполняют более интенсивную работу ЦП, чем другие потоки. Мы столкнулись с проблемой, когда запускается так много потоков, что загрузка ЦП становится неудобно близкой к 100% при низком проценте простоя. Я понимаю, что если загрузка ЦП становится слишком высокой, это влияет на другие работающие службы, например, система не будет принимать новые логины ssh, пока не перезагрузится.

Разве не существует автоматического монитора процессов, который можно настроить на системном уровне, чтобы предотвратить слишком интенсивное использование ЦП пользовательскими процессами, чтобы на системные службы это не влияло?

2 ответа2

1

Большинство пользовательских процессов в Linux имеют одинаковый уровень приоритета при запуске и имеют одинаковые временные интервалы. Все потоки также имеют одинаковое количество временных интервалов, поэтому, когда их слишком много, другому процессу может потребоваться долгое время для ожидания следующего временного интервала.

Существует по крайней мере три способа контролировать, сколько процессорного времени получает процесс:

  • Команда nice может вручную снизить приоритет задачи.
  • Команда cpulimit может приостановить процесс, чтобы избежать его превышения предела.
  • Группы управления Linux (cgroups) могут ограничивать количество ресурсов, доступных для процесса.

Для получения дополнительной информации см. Статью
Ограничение использования процессора процессами nice, cpulimit и cgroups.

0

Альтернативное решение: если вы запускаете JVM в качестве контейнера Docker, команда docker run имеет много опций для ограничения использования ЦП (количество ЦП, квота ЦП ...).

Использование контейнеров также упрощает развертывание и управление вашим приложением.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .