2010-12-16 2 views
1

Я хочу написать непривилегированную (не root-доступ) клиентскую программу JMX, которая контролирует приложение с привилегированным (работает как root) с включенным локальным доступом JMX -Dcom.sun.management.jmxremote.Контроль доступа к локальному мониторингу JMX

По крайней мере, на MacOSX, jconsole (и jps) не видят корневых процессов, когда я запускаю как себя.

Это просто факт жизни здесь, или есть способ настроить это?

ответ

1

Если вашему клиенту не разрешено видеть корневой процесс, вы не можете прикреплять его по PID. Вам нужно, чтобы корневое приложение загрузило JMXServer, который будет прослушивать порт [> 1024], а затем вы можете подключаться через порт, а не через PID. Самый простой способ сделать это - указать еще пару системных свойств, которые заставят JVM автоматически загрузить сервер JMX. Например (это все наиболее небезопасные):

  • -Dcom.sun.management.jmxremote.authenticate =
  • ложно
  • -Dcom.sun.management.jmxremote.ssl =
  • ложно
  • -Dcom. sun.management.jmxremote.port = 7777

См. JMX Management and Monitoring Properties.

Чтобы программно создать JMXServer, см. JavaDoc для javax.management.remote. Существует действительно хорошее руководство/учебник по этому вопросу here.

+0

О, пожалуйста, пожалуйста, можете ли вы указать мне инструкции по запуску вручную JMX-сервера вместо данных -D? И будет ли такой сервер выставлять сборку в VM-бобах? – bmargulies 2010-12-16 21:25:17

1

JMX использует простой TCP-порт, который можно определить с помощью некоторых параметров командной строки. Если порт открыт, любой (включенный в него непривилегированный пользователь) должен уметь его видеть.

Что касается самого процесса, jps не может видеть процесс другого пользователя, но вы можете видеть его с помощью «ps aux».

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