IDEA 远程debug linux(CentOS7)java应用的过程总结

在网上找了很多解释和应用,不过还是花了很多时间摸索,所以在这里写一下自己的总结。

一. debug 环境
  1. 本地:window10、 jdk1.8 、idea
  2. 虚拟机:CentOS7、jdk8、tomcat9
二.如何远程链接java引用并且debug
  1. 在linux系统上开启java引用的端口监听,将java应用的debug绑定到端口,等待本地idea链接。
  2. 本地设置远程debug的环境,将本地idea链接到远程linux系统,进行java应用调试。
三.具体操作
  1. 首先在本地idea配置一个运行配置(remote):点击run->Edit Configuration(下拉idea右上角的下拉框,点击Edit Configuration)。
    IDEA 远程debug linux(CentOS7)java应用的过程总结_第1张图片
    (以上两处二选一)
  2. 设置虚拟机的ip地址以及虚拟机监听的端口号。
    IDEA 远程debug linux(CentOS7)java应用的过程总结_第2张图片
    红色为虚拟机ip地址以及端口号,黄色为需要复制到虚拟机的内容,设置好后点击保存,并且最好重构项目。
  3. 当需要debug的应用为普通java应用时:打开虚拟机的应用debug,开启监听。
    在虚拟机输入命令行(黄色为从idea复制的字段,设置了虚拟机参数,最后为自己debug的jar包)
    java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 demo.jar
  4. 当需要debug的应用为部署在tomcat的web应用时方式1:(本人未尝试,为网上经验)
    在tomcat的bin目录中,新建setenv.sh文件,输入:(代码中的部分可按黄色字体部分修改,也可加上虚拟机参数)
    CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
  5. 当需要debug的应用为部署在tomcat的web应用时方式2:(本人未尝试,为网上经验)修改tomcat的bin目录下的Catalina.sh文件,在第一行加上(代码中的部分可按黄色字体部分修改,也可加上虚拟机参数)
    export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
  6. 打开虚拟机监听后,点击右上角绿色爬虫标志(调试按钮),出现Connected to the target VM, address: ‘192.—.–.252:5005’, transport: ‘socket’ 等信息即为成功
四.个人出现的问题。
  1. 首先,在idea的设置中,可以选择不同版本jdk的不同设置方式,如果选择jdk8则出现设置样式为本文黄色标记部分,有1.4以下版本或1.9以上版本的区别,不同版本的样式不同,输入到虚拟机也不同,请读者自行查阅修改。
  2. 由于第1点出现的问题,本人一开始在虚拟机设置的jdk版本为jdk12,但在设置不出错的情况下一直报出链接错误,网上解释为端口号被占用或者没有开始监听,本人尝试过并未成功,于是修改jdk版本为jdk8,之后不再报错,估计是由于不同版本产生的兼容问题。
五.番外
  1. 用于开启linux防火墙端口,当端口被防火墙屏蔽导致无法链接可以使用以下方法(CentOS7版本)。
    CentOS6等为修改iptables文件,由于本人没有尝试所以不加以笔墨。
    firewall-cmd --zone=public --add-port=5121/tcp --permanent
    #–zone 作用域
    #–add-port=5121/tcp 添加端口,格式为:端口/通讯协议
    #–permanent 永久生效,没有此参数重启后失效
  2. 查看端口是否被占用,例:
    netstat -anp |grep 3306查看是否占用
    netstat -nultp 查看全部端口
  3. 重启网络服务器:service network restart
  4. jdk以及tomcat的下载网上很多,自己百度
  5. 有什么错误可以提出,欢迎指正。
六.额外部分
  1. idea jconsole链接观察java应用的内存状态(本部分的1.2,1.3未经笔者实践,将来实践后出现问题将会来编辑,因为都是我通过之前的经验总结的(猜的)
    1.1 在java应用的Edit Configuration中设置,在虚拟机参数中加入参数:
    -Djava.rmi.server.hostname=1.1.1.1 
    -Dcom.sun.management.jmxremote.port=18099 
    -Dcom.sun.management.jmxremote.rmi.port=18099 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false 
    
    然后打开jconsole,可以通过cmd->jconsole打开jconsole,选择远程链接,通过设置好的ip和端口访问本地window java应用程序。
    1.2 在linux通过以下指令打开demo-java.jar 的java程序,可以通过ip和端口进行jconsole链接(不需要分行,本人为了好看分的行)
    ${JAVA_HOME}/bin/java 
    -Djava.rmi.server.hostname=1.1.1.1 
    -Dcom.sun.management.jmxremote.port=18099 
    -Dcom.sun.management.jmxremote.rmi.port=18099 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false -jar demo-java.jar
    
    1.3在linux的tomcat/bin目录下的Catalina.sh文件中用vim编写加入以下参数,然后用${JAVA_HOME}/bin/java -jar -demo-java.jar命令打开java应用
    export JAVA_OPTS=
    "-Djava.rmi.server.hostname=10.3.19.24
    -Dcom.sun.management.jmxremote.port=8099
    -Dcom.sun.management.jmxremote.rmi.port=8099 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false"
    
额外
  1. ps :在启动jar包时,在后面加上–debug会显示debug日志

你可能感兴趣的:(linux)