Java — как определить текущую нагрузку

Как определить текущую загрузку сервера? Нужно ли мне использовать JMX здесь, чтобы получить время процессора, или есть другой способ определить это или что-то подобное?

Я в основном хочу, чтобы фоновые задания выполнялись только тогда, когда сервер простаивает. Я буду использовать Quartz, чтобы запускать задание каждые 30 минут, проверять загрузку сервера, затем продолжать, если она низкая, или останавливаться, если он занят.

Как только я смогу определить, как измерять нагрузку (процессорное время, использование памяти), я могу измерить их в различных точках, чтобы определить, как я хочу настроить сервер.

Уолтер


person Community    schedule 23.11.2009    source источник


Ответы (2)


Сложно сделать портативным способом, это, вероятно, будет сильно зависеть от вашей платформы.

Альтернативой является настройка заданий Quartz для выполнения в потоках с низким приоритетом. Quartz позволяет вам настроить фабрику потоков, и если сервер занят, то нить следует перетасовать в конец пакета до тех пор, пока ее можно будет запустить, не мешая.

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

person skaffman    schedule 23.11.2009
comment
Спасибо, я попробую. Меня не волнует, какая нагрузка на сервер, просто это получает самый низкий приоритет и в конечном итоге будет работать. - person ; 24.11.2009

Я думаю, вы сами ответили на свой вопрос. Если вам нужно чисто Java-решение, лучшее, что вы можете сделать, это информация, возвращаемая ThreadMXBean.

Вы можете узнать, сколько существует потоков, сколько процессоров имеет хост-компьютер и сколько времени было использовано каждым потоком, и рассчитать загрузку ЦП на основе этого.

person Dan Dyer    schedule 23.11.2009
comment
Спасибо за ваш комментарий, я использую задания Quartz, поэтому я попробую потоки с низким приоритетом, чтобы увидеть, как это работает. Мне действительно не нужно знать, какова нагрузка, я просто хочу, чтобы она была с самым низким приоритетом в списке. - person ; 24.11.2009