远程调试 Tomcat

2016/01/01 Java

有的 bug 在本地环境调试不出来,只能使用远程连接到出问题的服务器上进行调试。

IDEA 远程调试 Tomcat

  1. 首先在IDEA中 check 出来你要调试的工程的代码,假设工程的名字为A。然后在 IDEA 打开这个工程。
  2. 因为我们用的是 Tomcat,所以在IDEA中点击右上角那个 Edit Configurations 按钮,然后在弹出的界面中点击左上角的加号,选择 tomcat server->remote
  3. 在弹出的的界面中填写服务器的 ip 和工程的端口。
  4. 然后点击那个弹出框的 Starup/Connection 选项卡,点击 debug 按钮,可以看到下面的文本框中有一段类似于下面的文字:
     -Xdebug -Xrunjdwp:transport=dt_socket,address=55890,suspend=n,server=y
    
  5. 将文本框中的这段话复制,然后登陆自己的远程机器,修改配置,在 JAVA_OPTS 属性中增加上面的那段话, 并重启 Tomcat 。
  6. 然后回到自己的 IDEA 点击 debug 就可以加断点调试了。profile 什么的都不需要选择。

JConsole 远程连接 Tomcat

修改 catalina.sh

在原来的 CATALINA_OPTS基础上添加如下配置:

# jconsole connect
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=172.16.4.139 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"

修改 jmx 账号密码

找到服务器上 jdk 中 jdk/jre/lib/management 路径下的 jmxremote.accessjmxremote.password

mv jmxremote.password.template jmxremote.password   
chmod 600 jmxremote.access jmxremote.password  
vi jmxremote.password   

jmxremote.access 一般保持原始内容不变即可。 对于 jmxremote.password,将 其中的:

# monitorRole  QED
# controlRole  Q&D

井号注释取消掉。其中 monitorRole 为只拥有只读权限的角色,controlRole 有更高权限:读写等等。

开放端口

之前在 catalina.sh 中使用了 12345 端口,需要添加到防火墙信任列表

vi /etc/sysconfig/iptables

添加如下一行

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 12345 -j ACCEPT

启动 jconsole

在命令提示符下执行:

jconsole

即可启动 jconsole

Search

    Table of Contents