最近工作有点忙碌,遇到了两次莫名不知如何解决的错误,由此暴露的问题让人不禁反思:

好的分析排查习惯比问题本身更值得关注。

首先是前天晚上遇到的一个问题是这样的:

我需要定时去从redis的zset里面取得一些key,然后查询数据库,得到一些原始数据,再通过外部的一些webservice去发送微信消息,通知到相关用户。由于取出来的key可能是多个,所以在最外层我是包了一层for循环,整个代码都是promise化的异步(nodejs技术栈)

在发送微信消息之前的步骤里面我每个关键部分都有log输出,然而最后还是遇到了报错,运行到调用webservice发送请求之后,脚本无输出了很长一段时间,然后打印出了out of memory的js stack信息。我最开始的思路是去google查询相关错误信息的解决办法,然而这种堆栈报错更多是因为循环回调太深造成内存耗尽,一般出现在数据量较大的循环调用中,而我在测试的时候只有一条数据,应该不是这个表面造成的原因。

按照一般的思路,我开始增加更多的日志,一段一段去屏蔽代码,在最后一次输出正确之后的代码往往是问题所在。而那一段是使用superagent发送post请求的代码块,我单独屏蔽之后发生没有报错,于是我单独写了一个测试脚本來运行这段post请求,然而并没有报错。走到这里我开始感觉郁闷和无奈,到底错在哪里?

后面去请教后端老大,他首先格式化了一下我的代码,让代码更整洁(由于使用的是简单ide,写多了就会有些乱)。之后他提醒我在每一段promise段中增加catch代码,因为我嵌套了多个promise对象操作,而有一部分并没有最终return出来,所以有些error可能没有catch到。

在增加这些异常捕获之后还是没发现问题,之后关注重点就回到post请求,先修改了返回延迟,然后终于打印除了response,最终发现了问题所在是因为post的数据不符合superagent内部解析方式,而因为请求容忍时间太长了,导致了内存异常不能暴露出真正问题。

其实我已经确认了问题所在,但没有继续深挖以及完善日志记录。而且在重现问题写单独脚本的时候,我并没有使用相同的数据作为测试,而是写死了一个测试数据,最终没能暴露出真相。

还原现场的前提是:

数据、条件、逻辑三者保持完全一致。

第二个遇到的问题是:

突然前端同学找到我,说某单独部署的项目出现了不能正常生成一些数据,每次都报:Not a string or buffer的错误。首先我拿到这个问题也是去理清逻辑和增加必要log,然而那段报错信息太少了,我最终也排查到了错误段,又一次遇到了和之前那个问题一样无法更进一步的窘境。

最终也是在老大的协助下,通过使用console.error(e|| e.stack) 打印出了堆栈错误信息,追踪定位到了出错的文件和文件行,发现是由于配置文件造成无法加密出salt,造成TypeError报错。

总结:调试的思路和方法需要多注意,catch中多使用console.error打印堆栈信息而不是简单的Log.感谢团队的同事以及老大耐心地帮助,我也会好好反思,提高自己。

转载于:https://www.cnblogs.com/freephp/p/7220688.html

一叶障目:排查问题的思路相关推荐

  1. PLC故障排查步骤的思路和方法

    PLC故障排查步骤的思路和方法 PLC硬件损坏或软件运行出错的概率极低,检查故障时,重点应放在PLC的外围电气元件,PLC的故障大多数是外围接口信号故障,维修时,只要PLC有部分控制的动作正常,就不用 ...

  2. 【博客630】MTU网络问题排查及解决思路

    MTU网络问题排查及解决思路 前奏:什么是MTU ? 网络层发送数据包是有最大长度的,网络层从传输层接收到要发送的数据包时,它要判断向本地哪个接口发送数据,并查询该接口获得其最大传输单元MTU(Max ...

  3. 关于MySQL内存泄露如何排查的一些思路

    点击上方"蓝字" 关注我们,享更多干货! MySQL使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题.算是比较普遍的现象. MySQL内存使用率过高,有诸多原因.普遍 ...

  4. linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  5. linux 磁盘满了 预警,Linux磁盘空间满了的排查与解决思路

    block正常满 (磁盘实际不足) inode 满 大量的小文件 block 满 文件没有被彻底删除(硬链接数0 进程调用数不为0) 解放方法: 1 查看df -h 磁盘使用量根据占用量大小逐步逐步排 ...

  6. window服务器cpu过高的排查_服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  7. 关于Exchange邮箱服务器角色故障排查及解决思路分享

    在最近一次关于Exchange服务器故障中,出现了员工无法进入邮箱的问题,最直接方法来登录OWA页面,看看正常不正常,反映出来的报错信息如下: 当接到这个报障后,第一时间,当时有人问到是不是公司的CA ...

  8. Linux服务器CPU使用率过高排查与解决思路

    日常工作中有时候会遇到Linux服务器上出现CPU负载过高的情况,影响程序的运行,一般的排除思路如下: 方法一: 使用top命令 然后按shift+p按照CPU排序,找到占用CPU过高的进程的pid ...

  9. SpringCloud大项目最快速的排查问题的思路

    尝试重现问题. 查看Log.服务器监控等信息. 梳理最近的修改项.

最新文章

  1. shell逐行读取文件
  2. Security-OAuth2.0 密码模式之客户端实现
  3. spring cloud consul整合
  4. 先天性异常或智力残疾儿童患者的外显子组和基因组测序:美国医学遗传学与基因组学学院循证临床指南...
  5. MyBatis学习总结(4)——解决字段名与实体类属性名不相同的冲突
  6. python实现猜数字小游戏
  7. Hibernate-03-Hibernate的检索方式
  8. JavaScript 中的FileReader对象(实现上传图片预览)
  9. 算法(第四版)IDEA终极环境配置
  10. qt repaint 用法_QT 界面绘制刷新机制
  11. video.js的使用,打造自定义视频播放器(综合详解,可收藏)
  12. matlab 将矩阵变为一列,MATLAB中把一个矩阵转换为一列
  13. 数据库以及Mysql入门
  14. 三维模型obj文件解析
  15. 修理TDS1012示波器经验
  16. 倒置的方法//c++
  17. 深入理解7种垃圾收集器
  18. Python基础--读取yaml文件
  19. python 将json字符串格式数据格式化保存到本地文件
  20. CRM客户关系管理系统01

热门文章

  1. python的类和实例_Python 面向对象编程——类和实例
  2. f分布表完整图a=0.05_2019年05月16日,沪深A股股票分析
  3. Linux笔记-scp或ftp或sftp传文件后最后修改时间
  4. Java笔记-Spring-rabbitmq中设置receiveMessage参数为Message
  5. Java笔记-解决java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to
  6. Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)
  7. HTML期末作业-牛排美食餐厅网站
  8. html 图片自由缩放_PS中的“缩放”
  9. matlab 反激变压器,基于matlab的反激电路设计..doc
  10. android audit2allow工具使用步骤