我在 Tomcat 7 上部署了一个 Grails 2 应用程序,在 Amazon EC2 Ubuntu 实例上运行。通过 SSH 连接远程调试/监控应用程序所需的最少步骤是什么,例如使用 jvisualvm(JDK 附带)?
最佳答案
我找到了一个可行的解决方案,因此将其记录下来以备后用。请注意,此示例在 Tomcat 端未使用任何身份验证或 SSL。稍微调整一下,这也应该适用于非 Ubuntu 实例。
<强>1。在远程机器上,通过添加到 Tomcat 的 JAVA_OPTS 来启用 JMX:
在/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 连接到远程机器并在本地端口 10000 中创建一个 SOCKS 隧道。(这将向远程机器打开一个看起来正常的 SSH 提示符,但也会在 session 中打印额外的调试日志。)
ssh -v -D 10000 <hostname>
启动 jvisualvm。这些参数用于增加内存并使 jvisualvm 知道已编译的 Grails 类,target/classes 相对于 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 应用程序了。
关于tomcat - 使用 jvisualvm 调试远程 Grails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399732/