记一次线上问题排查
上周二晚上,顶着头痛干完饭(阳了),看到研发群里同事在看一个线上问题,好久没解决。也没找到原因,于是我就抱着试试看的态度问了一句,是普片现象还是个别现象,排除线上测试数据问题。结果是普片现象。下面记录一下我的排查过程。
1、问题现象
医生详情信息查询,返回科室编码【deptCode】为空,导致用户IM会话无法正常联想会话。
2、排错步骤
2.1、根据请求参数,排查是否是数据问题
根据请求接口及参数,并找到后端对应的接口对应的sql脚本,带入参数,查询数据没有问题。
2.2、检查代码,是否存在代码变更导致错误
经检查,代码逻辑无异常,通过postman测试,本地部署线上对应代码版本测试正常。
2.3、怀疑有人手动修改过线上应用包
怀疑归怀疑,我们怎么进行验证呢,我们可以通过checksum来验证,应用包是否有被手动修改过。首先我们找到线上部署应用包,然后通过md5sum生成应用包的校验值,然后和其他环境对应的版本的md5sum值进行比对。其实这一步骤可以省略(因为在构建的时候有生成应用的md5sum值,在remote_md5.txt文件中),但是如果没有的话,可以按照下面步骤进行排查。
- 在开发环境部署生产对应应用版本
- 找到服务包的所在位置
查找进程号
jps -l |grep zhgl-cloud-server
- 进入进程所在目录
cd `pwdx 32583 | awk -F: '{print $2}'`
- 找到应用包
- 生成md5校验值
md5sum zhgl-cloud-server.jar
- 同样方式找到生产对应应用包根据上面的方法生成md5sum校验和值
经过对比md5sum值,明显应用包被人修改过,然后根据服务API涉及的DAO层接口定位到文件UserDocMapper.xml,然后通过vim查看jar包中的xml文件。
2.4、应用jar包内容查看
这里要通过vim对jar包进行编辑,前提是服务器上要事先安装好解压工具unzip。安装命令如下
yum install unzip
- 编辑jar包
vim zhgl-cloud-server.jar
- 进入编辑模式后,按/按键然后输入要查看文件名称,最好写全名
- 输入完成然后按回车键
此时此时会自动定位到文件所在目录
- 然后再次按回车键
此时会打开定位的文件
- 根据关键词搜索
Shift+g调到当前文件底部,然后输入?+关键词,我这里是Detail,然后按回车,定位到你想要找的那个方法,如果有多个包含关键词的方法,可以通过字母n键向上搜索下一个,直到找到你要找的方法。如下图:
- 查看关键属性dept_code为啥值变成了空
一眼就可以看出honor_cite属性后面没有加逗号,导致dept_code变成了honor_cite的别名,从而引发了这个事故。
- 解救方法
1)、编辑保存并退出
按字母i键进入文件编辑模式,在对应的字段后面增加逗号。按ESC然后冒号(shift+冒号),再输入x退出并保存。
2)、退出jar包编辑模式
文件编辑完成后,再次按ESC然后冒号(shift+冒号)再输入q!退出即可。
- 修改完毕后,重新启动应用
至此问题处理结束。虽然很简单。但是一定要记得同步修改代码库的文件,对于生产应用及数据要时刻保持敬畏之心,不要随意修改,简单的也不行,一个小逗号都能引发生产事故。所以大家还是谨慎行驶。