文章目录
- 前言
- 意见和建议
- 技术要点
- 小试牛刀
- 通信端口放行
- Idea增加remote启动项
- 服务端JAR增加参数并启动
- 本地项目启动远程debug
- postman测试debug
前言
在实际的生产中不免会出现系统问题,有的在测试环境发现,有的在预发布环境发现,更有甚者在生产过程中出现造成事故。一般在我们发现问题时都会用debug来查找原因,但是有些时候我们本地环境由于某些原因根本不能复现线上问题。那么,这个时候我们可以考虑用远程debug来排查问题。
意见和建议
线上远程debug的断点会阻塞线程,生产环境慎用。如果必须使用建议在用户访问量不高的情况下使用,严重情况下会导致服务不可用。
技术要点
JAR包启动参数增加:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18765
18765为debug通信端口,可根据需要任意配置
小试牛刀
通信端口放行
1、云服务器开启安全组端口
3333 项目本身运行端口
18765 debug端口
注:不使用云服务器不用配置安全规格,只需要打开防火墙等即可。
2、物理服务器开启防火墙(iptables方式)
清除系统自带防火墙改用iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld.service
然后,安装并开启iptables
yum install iptables-services -y
systemctl enable iptables
systemctl start iptables
再在iptables中加端口限制规则
vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3333-j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 18765 -j ACCEPT
重启iptables
systemctl enable iptables.service
systemctl restart iptables.service
Idea增加remote启动项
本地idea代码增加remote启动项,并设置服务器host\ip
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18765
Idea高版本不需要以下参数:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=18765
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=18765
服务端JAR增加参数并启动
1、增加JAR参数
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18765
2、启动JAR
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18765 i-finance-0.0.1-SNAPSHOT.jar &
本地项目启动远程debug
本地启动远程debug模式
postman测试debug
1、post按照正常流程请求服务器接口
2、直接就会同步debug到本地项目了
3、放开本地断点postman直接捕获返回数据