尽可能少用,需要重启服务器上的 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 设置为默认。以后有需求可以再改回来。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。