首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在线调试java应用的方法

在线调试java应用的方法

原创
作者头像
用户11976114
发布2026-01-15 10:42:06
发布2026-01-15 10:42:06
1110
举报

我们经常遇到一个问题,程序员说:我本地可以。但是线上就是出问题,无法调试。而即使云端的日志功能再强大,因为应用本身打日志打的不够详细,因此也无法从日志看出什么问题,那么问题就来了,我们该怎么调试线上应用排查问题呢?

这种问题无非是线上的运行环境不一样,比如jdk版本、系统版本或者是数据库的脏数据、其他中间件脏数据等等。

这时候,有两种方案来调试。

方案一:线上应用启动在线调试,然后本地idea使用远程调试功能,连接在线调试端口,进行远程调试。这种方案的缺点是假如应用是部署在k8s里面的,连接应用的调试端口就比较麻烦。

方案二:将线上的数据库和redis、es那些其他中间件资源,使用ssh隧道工具,这里推荐使用yunedit-ssh,通过ssh跳板机,将端口映射出来本地电脑,然后使用本地电脑同一个版本的程序连接数据库调试。这种方式的缺点是无法验证到服务端的jdk版本和系统版本的差异,只适合数据库和中间件有脏数据的场景。

方案一详细教程:

(1)服务端java启动的时候,增加远程调试端口

在java的启动命令里,追加启动参数,参数如下:

代码语言:cmd
复制
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

(2) 使用yunedit-ssh的ssh隧道功能,做端口映射,将服务端的5005通过服务端的ssh跳板机映射到本机。

不要直接开放机房的5005端口,这样任何人无密码都可以连接调试,通过ssh隧道做端口映射可以有一层ssh登录验证保证安全。

如下图所示,添加一个ssh连接,填写服务端ssh跳板机的地址、端口、密码等。然后添加映射规则,添加完后就是下图的界面,启动映射规则即可。

上图的意思就是将服务端应用服务器的5005端口,映射到本地5005端口,idea访问本地的5005端口,就可以连接到远程的服务调试了。

(3) 在idea配置一个远程调试配置,远程调试

在idea点击Run菜单,点击Edit Configurations

会出现下图的界面,点击左边这个➕号,创建一个Remote Jvm Debug调试类型的调试项。选择了类型后,出现这个界面:

因为先前已经使用ssh隧道做了端口映射了,因此Host填localhost即可。

(4)在代码中打断点,等待断点事件发生

在代码中打完断点后,就可以测试问题代码了,触发断点的方法也很简单,原来在线上怎么触发这段代码的,就怎么处罚这段代码就行了。好了,方案一的流程介绍完毕。

方案二详细教程:

假如你不想远程断点调试,确定是数据的问题。可以将远程数据库的端口映射到本地,进行测试。当然,为了安全,数据库和redis这些中间件,也需要通过ssh隧道做端口映射,多一层ssh验证做保护。

还是打开yunedit-ssh,假如你还没有yunedit-ssh,先下载安装,然后做端口映射:

在主界面,点击创建ssh连接,填写ssh跳板机地址、端口、密码等等,然后添加端口映射的映射规则,添加完后出现如下图界面。

上图中,有一条规则是把服务端mysql的端口3306,映射到本地3306的例子

这样,本地通过连接localhost:13306,即可连接远程的数据库进行测试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档