记一次线上问题排查之【一个逗号引发的生产事故】

60 阅读3分钟

记一次线上问题排查

上周二晚上,顶着头痛干完饭(阳了),看到研发群里同事在看一个线上问题,好久没解决。也没找到原因,于是我就抱着试试看的态度问了一句,是普片现象还是个别现象,排除线上测试数据问题。结果是普片现象。下面记录一下我的排查过程。

1、问题现象

医生详情信息查询,返回科室编码【deptCode】为空,导致用户IM会话无法正常联想会话。

2、排错步骤

2.1、根据请求参数,排查是否是数据问题

根据请求接口及参数,并找到后端对应的接口对应的sql脚本,带入参数,查询数据没有问题。

2.2、检查代码,是否存在代码变更导致错误

经检查,代码逻辑无异常,通过postman测试,本地部署线上对应代码版本测试正常。

2.3、怀疑有人手动修改过线上应用包

怀疑归怀疑,我们怎么进行验证呢,我们可以通过checksum来验证,应用包是否有被手动修改过。首先我们找到线上部署应用包,然后通过md5sum生成应用包的校验值,然后和其他环境对应的版本的md5sum值进行比对。其实这一步骤可以省略(因为在构建的时候有生成应用的md5sum值,在remote_md5.txt文件中),但是如果没有的话,可以按照下面步骤进行排查。

  • 在开发环境部署生产对应应用版本

image-20221227141348596

  • 找到服务包的所在位置

查找进程号

jps -l |grep zhgl-cloud-server

image-20221227141836894

  • 进入进程所在目录
cd `pwdx 32583 | awk -F: '{print $2}'`

image-20221227142041657

  • 找到应用包

image-20221227142917203

  • 生成md5校验值
md5sum zhgl-cloud-server.jar

image-20221227143144284

  • 同样方式找到生产对应应用包根据上面的方法生成md5sum校验和值

image.png

经过对比md5sum值,明显应用包被人修改过,然后根据服务API涉及的DAO层接口定位到文件UserDocMapper.xml,然后通过vim查看jar包中的xml文件。

2.4、应用jar包内容查看

这里要通过vim对jar包进行编辑,前提是服务器上要事先安装好解压工具unzip。安装命令如下

yum install unzip
  • 编辑jar包
vim  zhgl-cloud-server.jar
  • 进入编辑模式后,按/按键然后输入要查看文件名称,最好写全名

image.png

  • 输入完成然后按回车键

此时此时会自动定位到文件所在目录

image.png

  • 然后再次按回车键

此时会打开定位的文件

image.png

  • 根据关键词搜索

Shift+g调到当前文件底部,然后输入?+关键词,我这里是Detail,然后按回车,定位到你想要找的那个方法,如果有多个包含关键词的方法,可以通过字母n键向上搜索下一个,直到找到你要找的方法。如下图:

image.png

  • 查看关键属性dept_code为啥值变成了空

一眼就可以看出honor_cite属性后面没有加逗号,导致dept_code变成了honor_cite的别名,从而引发了这个事故。

image.png

  • 解救方法

1)、编辑保存并退出

按字母i键进入文件编辑模式,在对应的字段后面增加逗号。按ESC然后冒号(shift+冒号),再输入x退出并保存。

image.png

2)、退出jar包编辑模式

文件编辑完成后,再次按ESC然后冒号(shift+冒号)再输入q!退出即可。

image.png

  • 修改完毕后,重新启动应用

至此问题处理结束。虽然很简单。但是一定要记得同步修改代码库的文件,对于生产应用及数据要时刻保持敬畏之心,不要随意修改,简单的也不行,一个小逗号都能引发生产事故。所以大家还是谨慎行驶。