记录一次线上问题排查

panda2023-03-08 17:41:30前端解决问题 npm包 大胆猜想 合理假设

这是一个什么样问题?

首先说明一下场景: 项目是一个采用vue3构建的应用,一直工作的好好的,但是今天测试那边突然说有几个页面打不开了,只要一点进去浏览器就会卡死.然后我们前端就在本地查看了下那几个页面,但是奇怪的是本地能运行的好好的,一到线上就拉闸,而且浏览器没有任何报错,这就很复杂了,这类本地无法复现的bug是最伤脑经的,因为某些原因几乎无法本地调试(以后要想个办法).

初步排查

我们检查了一下那几个特定的页面,初步的试验了一下我们的想法,但最后都排除了这些可能.我们还想到昨天以及前些日子不是还好好的吗?我们就查看了下git记录,发现那些改动几乎不会影响到流程,都是些文字改动,但是为了确保真的不是这个引起的,我们还是尝试了回退,结果也的确如我们猜想,不是这些改动造成的.

好吧,那就只有慢慢排除了

我们首先尝试了一下,将那几个页面替换为毫无逻辑,且模板简单的结构,打包部署上去发现还真没问题,好,看起来有路子.然后我们就一步一步的排查起走了,慢慢将页面还原,认为这样就能定位到问题所在了,几乎尝试了所有的可能,页面已经完全还原的情况下还是无法排查出问题.我靠,这是为啥?!百思不得其解啊.

转机

就在我们无限霸屏Jenkins的几个小时后,同事一个想法冒了出来,我们要不要本地打个包让运维手动放到服务器上试试?"环境问题?""我想是的,试试看".这一试,还真就是这个问题!然后我们思考了为什么会是这样,于是就发现项目里的*.lock的文件并没有被git追踪记录,那么服务器那边clone代码后,也是没有这个文件的,这就会造成一个问题是,包的版本是动态的,虽然我们使用"^"来锁定大版本,但是小版本之间的差异依然是存在的,可能就是这个原因造成的.那行动吧,我们让git追踪了这些lock文件,然后将它上传到了仓库.Jenkins部署后问题也不存在了.哇~感觉浪费了好多时间哦,要是一开始能想到这个问题多好,搞笑的是,我以前的项目明明遇到过这个问题,但是我居然没有想到会是这个问题.

总结

编程的问题,大致是这样,如果一个问题你在你的范围内排查了很久,但是依然没有结果,你可能就需要跳出你的圈子来思考外部因素,换一种思路去思考问题.要结合你以往的经验来大胆猜想,并合理假设,然后加以验证来确认问题的所在.试想,如果没有同事这一句话,可能到下班的点,我们还在排查是不是代码问题.想想都觉得刺激~

但其实还有个问题是,我们发现这几个页面和其他页面一样,也没有什么特别之处,没有用到什么新的特性啊,奇怪的写法等等,但是就是有问题,但这个其实并不值得去深究,在前端工程化之后,每个工具链都有可能更新后出现问题(虽然这种几率在一些控制下很小),如果需要去排查这些构建工具上边的问题,那可是个体力活.我们今天知道了大致的原因其实就算成功了.

Last Updated 2023-03-28 13:29:53