对于本地项目测试没问题,发布线上各种奇奇怪怪的问题接踵而来,对此开发同学心里有何感想,跟老板battle还是默默查原因,苦逼的你只能加班解决问题,也不知道是请求方导致的问题还是程序自身的原因,接下来就对Idea调试怎么调试线上程序展开讲解。
好巧不巧我就就遇到,本地没问题线上运行了好久也没问题,突然那天线上的程序就出现订单进入系统不创建的问题,我这简单说下创建流程,由上游提供数据,我们的程序会吧订单数据保存到临时表中我们会把大部分数据保存在临时表中,订单真实表则保存系统生成的订单号和订单初始状态,然后通过定时器对临时表里面的数据进行组装完成后在,保存到订单真实表中!,所以上游说订单推送了为什么我们的系统没有订单号信息,就是因为定时器中的代码好像没被运行,这个就很奇怪,但是看代码结构是有对redis中的键判断查询不到才会运行后续流程,排查了redis没有问题于是就对代码可能影响方法运行的地方都打了日志后续也没有出现问题。但是虽然现在可能不会出现问题,那不意味着以后用不上这个远程调试,说了这么多也该进入正题了!!!
1.远程调试的Java项目要和本地的代码一样!
2.如果是War需要对服务器tomcat的启动配置进行修改
3.如果是在Docker中使用Tomcat运行War需要对容器添加一个新端口
配置完成后点击断点调试
运行后左下角肯定会报,拒绝连接
远程服务器中Java在Docker容器中运行War包时
注意:
在创建tomcat容器时我们一般只会把使用的端口进行映射,而远程断点使用的是Socket连接程序这就意味着我们需要吧原有的容器添加一个新端口应用远程连接因为要写这篇我特意写了篇已有容器怎么添加新端口点击查看
我这边已经配置好我Dokcer中的容器添加新端口用于远程连接,容器内部端口为8081
,宿主机(Linux对外访问的端口)端口为8082
进入容器修改Tomcat的启动配置信息
docker exec -it 容器id bash
然后使用vim 编辑 bin/catalina.sh
的配置文件
这里提示容器内部没有vim命令我们这在容器安装下
apt-get update
apt-get install vim
然后输入y回车
然后安装完成后在vim bin/catalina.sh
进入编辑
然后再第一行添加以下代码
address=8081
表示启动会创建8081端口运行端口号要改成容器新添加的端口
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081"
保存好后,退出容器内部
重启容器:docker restart 容器id
回到Idea修改端口信息
debug运行后,出现以下输出表示断点远程连接服务器完成
使用请求工具发送模拟请求:
当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处
到这里Docker中Tomcat运行War的远程断点就完成了!
在项目中添加远程断点接口用于测试,/weChat/debug
我们先本地进行调用保证后续请求不出问题!
只需要在后端添加一行配置就行
produces ="text/html;charset=UTF-8"
响应正常了
现在我们把项目部署到服务器中,并且打包方式为jar包部署
在start.sh
脚本中添加启动命令
nohup java -jar itmei.jar > /dev/null 2>&1 &
运行jar包
ps -aux | grep 包名称
查看进程
记得服务器使用到的端口要在对应服务商(阿里云,腾讯云)平台找到对应服务器实例开启防火墙设置端口信息到安全组里面
在测试请求接口
完成服务端的项目启动现在还不能远程debug需要在启动脚本添加参数
${debug_port}
设置成我们需要添加端口用于Socket连接使用的端口
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}
我怎么把Socket连接端口设置成8086
,该端口也要在防火墙里面设置才能访问
启动脚本修改为
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=8086 -jar itmei.jar > /dev/null 2>&1 &
配置信息必须在-jar前面
把之前的进程kill
掉
然后再运行./start.sh
IDEA运行Debug模式
使用请求工具发送模拟请求:
当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处
完成远程调试
其中我觉得这个都可以不用写下去,因为配置这个和前面写的Docker中Tomcat运行War调试的教程大差不差
由于没有安装Tomcat所以想偷懒不想再Linux中再安装(-_-)
我就当你们已经有在自己服务器中安装Tomcat的配置并且,还知道怎么修改tomcat的运行端口号,接着我就快速安装下tomcat完成后面的演示!
想了想,之前小白时候的自己看文章,作者也是一笔带过一些知识点,导致后面不知道写些什么,所以又写了一篇关于Linux安装Tomcat并且修改指定端口号的文章用于配备当前不太懂的小伙伴,给我点个赞吧,老铁(✪ω✪)!
文章地址
SpringBoot 打成War如果是单纯在pom.xml
打包方式改成war
在这里插入图片描述
运行后也访问不了需要对启动类进行改造点击查看
进入 webapps
目录下
使用工具把War上传到该目录下
然后vim catalina.sh
进入编辑
然后再第一行添加以下代码
address=8088
表示启动会创建8088端口用于IDEA的Socket连接调试
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8088"
保存完成后在运行tomcat
记得配置防火墙8088的端口,不然访问不了
配置好后运行
使用请求工具发送模拟请求:
当我点击发送请求后我本地IDEA在该请求方法中打入断点就会卡在断点处
Tomcat运行控制台打印信息
完成远程调试