使用 IDEA 远程 Debug

尽可能少用,需要重启服务器上的 Java 进程,避免影响正常使用。

1、保持本地代码和想要调试进程的代码一致,(si 环境一般使用开发主干,先把本地工作空间代码切到开发主干分支), 然后添加 remote 运行配置,具体见下图

上图中的 name 随便填,host 填写服务器 IP, module's classpatch 选择想要调试的项目

复制第一行备用:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

2、登陆服务器,为避免权限问题,使用 sudu su - 命令切换到 root (小心使用)

使用 ps -ef | grep java 找到想调试的进程

复制下完整的启动命令,例如

java -jar -Xms4096m -Xmx4096m -Xmn512m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof /data/dubbo/app/esmart-assign_8080/esmart-assign.jar --server.port=8080 --dubbo.port=28080 --server.tomcat.basedir=/data/dubbo/cache/esmart-assign_8080 --log.home=/data/dubbo/logs/esmart-assign_8080 --log.level=info --log.stdout=0 --ecej.ops.port=80 --ecej.ops.iswitch=1 --jmx.rmi.port=18080

把上一步复制的 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 添加到 -jar 后面,完整的启动命令为

java -jar  -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005  -Xms4096m -Xmx4096m -Xmn512m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof /data/dubbo/app/esmart-assign_8080/esmart-assign.jar --server.port=8080 --dubbo.port=28080 --server.tomcat.basedir=/data/dubbo/cache/esmart-assign_8080 --log.home=/data/dubbo/logs/esmart-assign_8080 --log.level=info --log.stdout=0 --ecej.ops.port=80 --ecej.ops.iswitch=1 --jmx.rmi.port=18080

3、先使用 sudo kill -9 27469 杀掉进程

复制完整的命令粘贴到 xshell ,回车执行

4、回到 idea , 选择第一步的启动配置,使用 debug 模式启动, 打想要的端点(尽可能少打,避免阻塞其他请求)

调试过程产生的日志不会打到 idea 控制台,可以使用 xshell 新开一个 tab 查看服务器上的日志文件

防止断点把 VM 挂起

提示:idea 的断点默认会挂起整个 VM , 这样一来,任何一个线程进入断点都会导致所有的请求被阻塞。这样有可能影响测试环境的正常使用。

解决方案:打完断点后,使用鼠标右键单击红点,将 Suspend 设置为 Thread,最后再点击一下 Make Default 设置为默认。以后有需求可以再改回来。

你可能感兴趣的:(远程调试)