IT学习站-137zw.com

more +资源更新Forums

more +随机图赏Gallery

10节课让你成为滚床单高手  强烈推荐 屌丝的福音10节课让你成为滚床单高手 强烈推荐 屌丝的福音
Spring Boot编程思想(核心篇) PDF 电子书 百度云 网盘下载Spring Boot编程思想(核心篇) PDF 电子书 百度云 网盘下载
最新流出的传智博学谷黑马python5.0课程最新流出的传智博学谷黑马python5.0课程
MySQL视频教程价值288元MySQL面试指南视频教程 百度云 百度...MySQL视频教程价值288元MySQL面试指南视频教程 百度云 百度...
python基础教程编程数据分析excel源代码pandas视频教学数据处理python基础教程编程数据分析excel源代码pandas视频教学数据处理
价值388元 Spark Streaming实时流处理项目实战视频教程 百度云盘价值388元 Spark Streaming实时流处理项目实战视频教程 百度云盘

【运维】记一次上线前的紧急定位与修复-献上九条小经验

【运维】记一次上线前的紧急定位与修复-献上九条小经验

[复制链接]
却写杂布计 | 显示全部楼层 发表于: 2019-11-14 09:10:01
却写杂布计 发表于: 2019-11-14 09:10:01 | 显示全部楼层 |阅读模式
查看: 138|回复: 0
1 简介

本文介绍了作者所在团队在某次上线前测试发现问题、定位问题并修复上线的过程,最后给出几点经验总结,希望对大家有用。
2 过程

(1)今天需要上线,但昨晚才合并了所有分支,时间很紧迫。不幸的是,打包测试后发现有一个Springboot应用(模块R)启动失败,但进程没有死,一直在输出报错日志
(2)Google了相关的报错日志,并没有找到相关信息。查看了模块R的代码变更,并没有什么改动,以为是环境问题;部署到其它环境后,发现问题依旧存在,而且这个问题从未出现过,基本排除环境问题,问题还是出在代码上。
(3)启动模块R上一个版本(现生产环境)的代码,正常启动。所以问题还是出现模块R的改动上。
(4)对比模块R的发布包的新版本与生产版本的差异,发现第三方依赖包都一致,但自己项目的依赖包不同。
(5)想到一个有效的办法,依次用生产版本替换掉自己项目的包,最终定位了问题出在通用模块D上。
(6)查看模块D的代码变更记录,改动比较大,比较难发现是哪里的改动造成的。
(7)重新看日志。为何要重看呢?并不是心血来潮,主要是想找关联。既然已经知道了问题在哪个模块代码上,通过查看日志与该模块可能相关的信息,或许能找到蛛丝马迹。
(8)果然!!!重新查看日志发现,模块R启动时,报了一个其它错误ErrorA,但被后面不断重复出现的错误ErrorB刷掉了,所以一开始并没有注意到它。通过该报错,与模块D的代码改动对比。终于定位出了问题!
(9)创建hotfix分支,修改代码提交,重新merge,打包,测试通过,部署生产!!!
因为部署上线是有特定的时间窗口的,如果错过了时间,就要下次再上线,还好及时定位,及时解决!
3 经验总结

(1)不要放过任何日志,特别是报错的日志,日志是极其有用的。不要只看最后面的报错,也不要只看最前面的报错,任何报错都可能提供新的方向和线索。如果日志信息不够,可以尝试打开debug模式,会有大量的日志信息,当然也要求你有足够强的过滤和整理信息的能力。
(2)提取有用日志,可以用grep、tail、less等linux命令。
(3)组件化、模块化很重要,能快速缩小问题范围。能通过只回退某个模块实现部分功能先上线。
(4)善用对比工具,如diff命令,BeyondCompare软件等。
(5)善用代码变更记录,这是版本控制给我们带来的好处,可以方便我们对比代码改动了什么,什么时候改的,能加速问题定位;也能及时回退代码。
(6)上线前要做充分的测试。这次问题的出现项目流程上的原因在于没有进行充分的测试。(1)写代码的人修改了通用模块,却没有测试依赖它的其它模块的功能会不会受影响,而只测试了自己那一部分;(2)合并代码后,没有足够的时间来进行测试。部署前一天,才合并了代码打包测试。所以时间非常紧迫,在短时间要定位问题并解决,容易造成压力。
(7)要有独立的测试环境。这个是导致方向性错误的原因,经过是这样的:A同学打包了自己的分支,这时刚好B同学稍晚一点也打包了分支,而打包的环境只有一个,B同学的包覆盖了A同学的包。所以在A部署的时候,实际用了B同学的代码打的包,导致启动失败。所以一直以为是A同学代码的问题,这个方向性的错误浪费了很多时间。应该要让每个分支可以同时打包,但不会覆盖。
(8)不要先入为主。不要过早认定某个模块就是有问题的,请参考上一条。
(9)团队作战,分工合作。整个过程全靠团队一起协作才能快速定位并解决;打造一个开放包容、沟通顺畅的团队是多么的重要。
If You Want to Go Fast, Go Alone. If You Want to Go Far, Go Together.
4 最后

运维和问题定位的知识很多,也非常重要,需要持续学习。本文仅讲述了本次过程用到的方法。更多的知识以后慢慢再介绍...
欢迎关注公众号,将持续为你更新...
【运维】记一次上线前的紧急定位与修复-献上九条小经验  技术博客 946674-20191114082748568-1811092429

多读书,多分享;多写作,多整理。

来源:http://www.137zw.com
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
137zw.com IT学习站致力于免费提供精品的java技术教程和python技术教程,CCNA书籍/资料/CCNP书籍/资料教程/CCIE书籍/资料/H3C学习/认证/一级建造师考试/微软学习/认证/包括基础教程和高级实战教程,同时也提供分享网站源码下载和互联网相关一系列的技术教程,我们想做的就是让知识分享更有价值!(IT学习站官方唯一域名地址:www.137zw.com 请谨防假冒网站!)本站所有资源全部收集于互联网或网友自行分享,分享目的仅供大家学习与参考,如无意中侵犯您的合法权益,请联系本站管理员进行删除处理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

浙ICP备19022368号-1|Archiver|手机版|IT学习站-137zw.com

GMT+8, 2020-7-10 23:35 , Processed in 0.259880 second(s), 34 queries .

快速回复 返回顶部 返回列表