- 在平常的项目发布后,线上出现问题,首现通过报错和日志查看问题,如果报错日志看不出问题时可以用远程debug的方式进行。
- 首先要再项目发布的时候进行配置。
发布脚本如下:
#!/bin/bash
source /etc/profile
project_jar=ipos-1.0-SNAPSHOT.jar
echo $project_jar
ps -ef | grep $project_jar |grep -v grep |awk '{print $2}' | xargs kill -9
sleep 5
echo '停止jar应用运行'
cd /usr/local/ipos/build/libs/
nohup java -jar -server -Xms512M -Xmx512M -XX:+UseG1GC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/usr/local/ipos-gc.log -Dspring.profiles.active=dev -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8090 $project_jar >/dev/null 2>&1 &
echo '启动jar应用完成'
我们要进行简单的配置:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8090
各参数解释:
-Xdebug:通知JVM工作在调试模式下
-Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境。参数同时有一系列的调试选项:
指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享内存方式,其中dt_shmem只适用于窗口平台.server 参数是指是否支持在服务器模式的虚拟机中。
onthrow:指明当产生该类型的异常时,JVM就会中断下来,进行调式该参数任选。
<code>release</code>:指明当JVM被中断下来时,执行的可执行程序该参数可选
<code>suspend</code><:指明:是否在调试客户端建立起来后,再执行 JVM。
onuncaught(= y或n)指明出现未捕获的异常后,是否中断JVM的执行。
在项目部署的机器上要开放8090端口。
发布项目
在idea中对应的项目启动进行配置:
然后启动对应的项目。当出现如下内容表示启动链接成功。
日志不会输出在控制台上,可以通过dedug查看项目中参数的传递请况。
至此远程debug调试就完成了。为了方便期间在项目发布脚本中就配置上,平时也不会影响正常的运行,在出现问题的时候只需要配置本地代码启动就可以了。
注意一定要保证本地和远程代码一样,不然可能会造成不可预估的损失。