Java 远程调试
2020-03-15 16:05:15来源:博客园 阅读 ()
Java 远程调试
用处
- 在单体应用时代,当代码已经部署到生产或者测试环境的时候,由于特殊需求,我们要对代码进行debug来调查问题
- 在微服务开发中,你开发的服务可能会依赖数据库、消息队列等资源,也有可能依赖其他的服务,这些服务又有新的依赖,这种情况下,在自己的开发环境中完全模拟测试、线上环境变的极其困难,所以无法直接对本机代码进行debug
在以上两种情况下,就需要进行远程debug
原理
- 线上/测试环境上的应用额外开通一个端口号,例如5005
- 本机启动一个debug进程,通过JDPA(Java Platform Debugger Architecture) attach到线上/测试环境中正在运行的进程,就可以进行debug
- 要保证本机和线上/测试环境代码一致性,否则不能进行debug
- 在debug过程中,可以通过修改变量值等措施修改debug流程
例子
例子介绍
本应用是一个简单的spring boot工程,只有一个简单的controller,里面一个restful API,接收外部请求,返回OK作为调用结果
@RestController public class ClientIpController { @RequestMapping("/health") public String health(HttpServletRequest request) { String result = "OK"; return result; } }
在服务器上启动应用(IP:192.168.0.114)
$ mvn clean package # 启动应用 $ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar client-ip-test-0.0.1-SNAPSHOT.jar
注意启动命令中追加的信息
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005(JDK 5-8) -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 (JDK 9+)
在5005端口上多启动一个监听,server=y等待外部debug进程attach进来
在本机上启动debug进程(IP:192.168.0.108),以eclipse为例
- 在Remote Java Application中新建应用,在连接信息中填写服务器的服务信息,启动debug
开始debug
通过上面的步骤,我们就在服务器上部署好了一个应用,并把本机的debug进程attach到服务器上的应用中
接着在需要debug的代码中打上断点,访问服务器上的服务,就可以正常进行debug了
额外的思考
通过上面的步骤,我们的确能够实现在本机对服务器上的应用进行调式,但是,这种情况下,要保证本机和服务器代码的同步,每次发现问题,还需要打包->部署等一套流程,即便是采用的CI/CD来做自动发布了,这个过程依旧比较长,特别是当服务器环境是现在比较流行的kubernetes、swarm等容器环境时,这个流程将更长,目前的想法是,用一个基础镜像,镜像里面有git、maven、java环境,镜像的启动命令中执行以下操作
- 根据传入的git uri下载源码
- 对于spring boot工程,利用命令mvn spring-boot:run直接启动服务
启动镜像时,在测试环境下传入
-e MAVEN_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
参数,指定可以进行远程debug
这样,每次修改完代码,上传到git上后,把对应的镜像重新启动一下就可以实现debug了
如果在线上环境不能执行远程debug,如果是kubernetes环境,可参照Local development with Java use Telepresence on kubernetes
原文链接:https://www.cnblogs.com/gaofeng-henu/p/12496724.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:java 继承
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash