2009-10-28 2 views
7

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

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

Я контролирую внешние JVM через MXBeans, но не вижу чистого способа убить внешний процесс, не имеющий системного вызова, типа «kill -9» (кстати, я работаю в UNIX).

Есть ли способ убить JVM через интерфейсы MXBean?

Грэм

+0

Я не знаю, как это сделать, но я стараюсь внедрить MBean «аварийного отключения», который просто вызывает System.exit при вызове (я также разрешаю вам проходить в коде возврата возврата). – Adamski

ответ

7

Несомненно. Внедрите MBean на целевом сервере, который вызывает System.exit(), и вызовите это как операцию JMX от клиента.

2

Если вы используете Spring, вы можете просто аннотировать свой компонент, чтобы одна из его операций была выставлена ​​как MBean operation. Поэтому было бы примерно так:

@MBeanOperation(description="Kill the service") 
public void die() { 
    System.exit(); 
} 

... или, возможно, остановите контекст приложения самостоятельно.

+0

Вы имеете в виду '@ ManagedOperation' – skaffman

Смежные вопросы