苍穹启用远程调试(本地远程调试线上服务)原创
金蝶云社区-JeremyG
JeremyG
28人赞赏了该文章 4021次浏览 未经作者许可,禁止转载编辑于2024年04月02日 09:18:56

背景:我们经常会遇到,本地开发环境都是好的,但是发布到测试环境可能就会出现异常。对于这种情况,一般我们可以通过日志文件或者monitor监控中心定位问题。不过有时候平台本身的日志并不能完全定位问题,那么我们可以通过远程调试的方式来调试服务器环境。


环境:本地轻量级环境、服务器linux环境。


步骤:

一、先配置服务器苍穹为远程调试模式启动

  1. 苍穹linux环境已经内置了开启远程调试的脚本,正常情况下只需按照debug模式启动即可开启远程调试。即启动命令为:/kingdee/cosmic/mservice/mservice/bin/kdservice.sh debug。(这里是通过mservice/bin下的kdservice.sh启动的,建议大家使用绝对路径启动,不要拷贝我的,我的路径可能和你的不一样

    (systemctl的启动方式不支持debug命令,所以只能用kdservice.sh的脚本启动)

  2. debug启动成功之后可以查看8001端口是否被监听,远程调试默认暴露8001端口,所以也需要服务器对外暴露8001端口。可通过命令:netstat -ntulp |grep 8001查看端口是否被监听。

  3. 如果8001端口未被监听,则说明mservice/bin下的setjvmdebug.sh未被加载到。这个脚本是启动苍穹配置的启动远程调试的脚本。没有被加载到可能就是中间某些脚本被修改了,大家可以从kdservice.sh脚本一层一层往下看,一般是kdservice.sh-》start.sh-》setenv.sh-》setjvmdebug.sh 这样的加载顺序。(脚本不是很难懂,加载文件就是source ./start.sh这样子的)。在setenv.sh中会根据环境变量然后判断需要加载的脚本,核心逻辑就在这:image.png是我遇到过一个把这块逻辑注释掉的,然后写死了加载某些文件,这样就一直加载不到setjvmdebug.sh所以8001端口未被监听的情况下,就需要大家看下自己的脚本文件分析问题

  4. 注意:如果涉及修改脚本文件,那希望大家通过vi或者其他linux命令修改,不要用一些可视化的工具打开来编辑。我自己踩过坑,编辑之后脚本会错乱,导致启动直接报错。(如果出现改完脚本之后启动报错自己找原因

  5. 上面介绍的为使用苍穹自带的调试脚本,当然大家熟悉的可以直接自己加jvm参数启动远程调试模式,效果是一样的,大家根据自己的情况实现。


二、开发工具配置远程调试并启动

  1. 首先需要保证本地运行的jar和服务器完全一致,版本不一致可能断点会让你看不懂!所以还是我们的老样子,从服务器mservice/lib里拉取jar包,替换本地的mservice-cosmic/lib里的jar,再刷新下开发工具的gradle。

  2. 配置远程调试,截图以idea为例。创建远程启动,指定ip端口还有启动的模块。详细的可以百度。image.png

  3. 断点启动,然后访问服务器环境即可进入本地断点。



2024.3.30附现在苍穹基本都是容器化部署的环境,要配置就是在容器节点的环境变量里配置JVM远程调试的参数,不知道怎么操作的可以拿上述关键字百度搜索即可。我没有具体环境验证,所以也不放截图了,大家有成功的可以写个帖子反馈回来。


如果发现文章有什么问题欢迎大家指出,我将积极验证修改。如果有帮到你,还请来一波三连:关注,点赞,收藏【emoji】【emoji】。觉得有用也可以分享到公司云之家群,惠及其他同事,感谢您的耐心观看~

赞 28