У меня есть приложение Grails 2, развернутое на Tomcat 7, работающее на экземпляре Amazon EC2 Ubuntu. Каковы минимальные шаги, необходимые для удаленного отладки/мониторинга приложения через SSH-соединение, например, с помощью jvisualvm (который поставляется с JDK)?Отладка удаленного приложения Grails с jvisualvm
ответ
Я нашел рабочее решение, документируя его для последующего использования. Обратите внимание, что этот пример не использует аутентификацию и SSL на конце Tomcat. При небольшой настройке это должно применяться и к экземплярам, отличным от Ubuntu.
1. На удаленной машине, включите JMX, добавив к JAVA_OPTS сервера Tomcat:
В /etc/default/tomcat7
, добавлять существующие JAVA_OPTS:
JAVA_OPTS = "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1098"
Затем перезапустите Tomcat, чтобы применить изменения:
sudo service tomcat7 restart
2.О месте аль машина:
SSH к удаленной машине и создать туннель SOCKS в местном порту 10000. (Это будет открыть нормальный вид SSH запрос на удаленную машину, но и печатать дополнительные журналы отладки в сеансе.)
ssh -v -D 10000 <hostname>
Запустить jvisualvm. Параметры для дополнительной памяти и делать jvisualvm знают скомпилированных классов Grails, с целевых/классов относительно каталога Grails приложения:
jvisualvm -J-Xms1G -J-Xmx1G -cp:a target/classes
Настройка jvisualvm использовать прокси-сервер, который мы создали:
Prefences > Network
Add SOCKS proxy: hostname: localhost, port: 10000
No Proxy hosts: (make empty)
Здесь я использую «Локальное соединение», чтобы избежать конфликта имен хоста между локальными и удаленными подключениями.
Right-click on Local > "Add JMX connection" > localhost:1098
Все, что вам нужно - теперь вы сможете контролировать свое удаленное приложение Grails.