背景:我们经常会遇到,本地开发环境都是好的,但是发布到测试环境可能就会出现异常。对于这种情况,一般我们可以通过日志文件或者monitor监控中心定位问题。不过有时候平台本身的日志并不能完全定位问题,那么我们可以通过远程调试的方式来调试服务器环境。
环境:本地轻量级环境、服务器linux环境。
步骤:
一、先配置服务器苍穹为远程调试模式启动
苍穹linux环境已经内置了开启远程调试的脚本,正常情况下只需按照debug模式启动即可开启远程调试。即启动命令为:/kingdee/cosmic/mservice/mservice/bin/kdservice.sh debug。(这里是通过mservice/bin下的kdservice.sh启动的,建议大家使用绝对路径启动,不要拷贝我的,我的路径可能和你的不一样)
(systemctl的启动方式不支持debug命令,所以只能用kdservice.sh的脚本启动)
debug启动成功之后可以查看8001端口是否被监听,远程调试默认暴露8001端口,所以也需要服务器对外暴露8001端口。可通过命令:netstat -ntulp |grep 8001查看端口是否被监听。
如果8001端口未被监听,则说明mservice/bin下的setjvmdebug.sh未被加载到。这个脚本是启动苍穹配置的启动远程调试的脚本。没有被加载到可能就是中间某些脚本被修改了,大家可以从kdservice.sh脚本一层一层往下看,一般是kdservice.sh-》start.sh-》setenv.sh-》setjvmdebug.sh 这样的加载顺序。(脚本不是很难懂,加载文件就是source ./start.sh这样子的)。在setenv.sh中会根据环境变量然后判断需要加载的脚本,核心逻辑就在这:但是我遇到过一个把这块逻辑注释掉的,然后写死了加载某些文件,这样就一直加载不到setjvmdebug.sh,所以8001端口未被监听的情况下,就需要大家看下自己的脚本文件分析问题。
注意:如果涉及修改脚本文件,那希望大家通过vi或者其他linux命令修改,不要用一些可视化的工具打开来编辑。我自己踩过坑,编辑之后脚本会错乱,导致启动直接报错。(如果出现改完脚本之后启动报错自己找原因)
上面介绍的为使用苍穹自带的调试脚本,当然大家熟悉的可以直接自己加jvm参数启动远程调试模式,效果是一样的,大家根据自己的情况实现。
二、开发工具配置远程调试并启动
首先需要保证本地运行的jar和服务器完全一致,版本不一致可能断点会让你看不懂!所以还是我们的老样子,从服务器mservice/lib里拉取jar包,替换本地的mservice-cosmic/lib里的jar,再刷新下开发工具的gradle。
配置远程调试,截图以idea为例。创建远程启动,指定ip端口还有启动的模块。详细的可以百度。
断点启动,然后访问服务器环境即可进入本地断点。
2024.3.30附:现在苍穹基本都是容器化部署的环境,要配置就是在容器节点的环境变量里配置JVM远程调试的参数,不知道怎么操作的可以拿上述关键字百度搜索即可。我没有具体环境验证,所以也不放截图了,大家有成功的可以写个帖子反馈回来。
如果发现文章有什么问题欢迎大家指出,我将积极验证修改。如果有帮到你,还请来一波三连:关注,点赞,收藏【emoji】【emoji】。觉得有用也可以分享到公司云之家群,惠及其他同事,感谢您的耐心观看~