Можно ли программно закрыть процесс Java через JMX? - PullRequest
7 голосов
/ 28 октября 2009

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

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

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

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

Graham

Ответы [ 2 ]

7 голосов
/ 28 октября 2009

Конечно. Реализуйте MBean на целевом сервере, который вызывает System.exit(), и вызовите его как операцию JMX от клиента.

2 голосов
/ 28 октября 2009

Если вы используете Spring, вы можете просто аннотировать ваш bean-компонент, чтобы одна из его операций отображалась как MBean операция .Так что это будет примерно так:

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

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

...