记一次生产问题-数据流被提前关闭
情景(situation):
前几天,发布新版本,出现了一个问题,但是问题其实不是出现在新功能,而是旧功能,简单介绍一下我们这边的发布流程:首先发布新版本到预发灰度环境,通过域名变化来控制灰度和生产的服务,实际上灰度和生产是共库的,预发环境仅作为测试或业务人员验证新版本功能使用。然后测试介入预发环境验证新功能是否有问题,有问题定位问题处理。最后验证没有问题之后,将在灰度预发环境验证过的包,替换到生产上(服务端不需要替换包,修改前端流量指向即可)。
新版本发布之后,经过预发环境验证没问题。但是在使用的过程中,发现一个老功能出现了问题,报错了:
org.apache.http.connectionClosedException:premature end of chunk coded message body:closing chunk expected
任务(task):
错误拿到了,接下来我们就要分步解决这个问题。
- 定位问题出现的具体位置,因为这个出现问题的功能是一个大功能,涉及到很多个环节和接口。
- 查看接口调用层的Repository代码是否在最近有被修改过,因为这个是老功能,理论上是不会有人动,如果动了,则可以迅速追查到问题所在。
- 使用curl模拟调用接口,查看接口是否能够调通,定位是否是接口本身的问题,是否接口有变化,但是没有通知到我们。
大概解决问题思路如上,首先定位到问题所在,然后定位