解决问题的通用思路 - 关于线上运行的程序出错
2017-05-25 23:55
330 查看
-查找原因
正向分析法:查看日志,包括正常日志和错误日志。对于日志里的异常内容,找到每个错误,如果是和自己写的程序逻辑相关,则定位到具体代码,进行相关程序代码分析。
对比分析法:
对比日志
参考最近一段时间正常运行时日志输出内容,对比现在出问题的日志内容。如果之前就有相同的异常日志并且程序运行正常,则可以认为该异常不是导致新问题的原因。
对比数据
如果能定位到相关数据库表,则可以对比数据最近一段时间和出问题的时间范围里是否有一些异常数据。异常数据指平时有规律的数据突然无规律,或者某字段一直有值但是出问题时候为空,平时是字符串但是出问题时候是数字等等。
假设分析法:
联想一下最近是否有任何相关改动。包括相关的程序代码,数据库表结构,服务器文件配置的改动,等等。如果程序一直运行好好的,突然出问题,80%都是做了新的改动。
发散分析法:
如果错误日志不是明显的业务逻辑代码报错,而是框架或者工具库相关错误,可以google,百度等搜索相关资料,看看是否有相关内容得到启示。
跟踪问题法:
如果已经能定位到相关的程序代码,但是不确定具体那种条件产生该错误,则可以在开发环境或者必要时在生成环境,加入一些日志输出代码,从而得到发生错误时候的更多数据信息。
重现问题法:
基于上面的分析结果,在开发环境进行测试。通过制造假数据或者写异常操作的代码,让服务器产生相同的错误信息使问题重现。
借用工具法:
如果是涉及一些性能问题分析,则需要使用相关工具。例如内存溢出要使用一些JVM内存监视分析工具,数据库查询慢要使用一些执行计划优化的分析命令。
-解决
在多种解决方案前提下,优选安全+有信心+快捷的方案。改数据 (IT同事在数据库后台修改或者业务同事在界面操作)
改程序 (程序逻辑代码错误)
重启服务器 (假如系统错误,非程序逻辑问题)
因为影响线上运行,所以要快速解决问题,使系统恢复正常。改动前必需做好相关数据备份和相关代码备份。在多种解决方案前提下,优选安全+有信心+快捷的方案。
什么是安全:就是改动小,范围可控的改动。
什么是有信心:除非万不得已,不要去写一些不确定能否解决问题的代码。解决问题的代码都必需在开发环境得到测试通过。
什么是快捷:就是如果可以仅仅改动某些数据或者表字段就能解决问题,就不要去改程序逻辑,从而避免潜在的代码新错误和由于重启服务器导致的线上停止运行服务。
-预防
解决问题后进行事后分析,防止将来问题重现。而且对于一些临时的线上解决方案,做好必要的跟进,彻底解决问题。相关文章推荐
- 关于Ubuntu运行shell程序出现问题的解决
- MFC关于解决点击关闭,对话框仍有后台程序运行问题 .
- 关于Myeclipse运行程序问题解决方法
- 关于asp.net程序第一次运行速度慢的问题解决办法
- java linux和windows下文件路径间隔符的写法——解决linux下程序在windows下运行时的上传文件出错问题
- 关于resin3以上版本不能运行struts1.2程序的问题解决办法
- asp.net发布到iis后到处excel程序运行出错,问题解决记录
- 关于asp.net程序第一次运行速度慢的问题解决办法
- 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法
- [ios]关于程序在ios7与ios8运行对分辨率的判断会出错的问题
- 关于winXP和win7,vs2010,opencv2.3,运行程序,报错“计算机丢失tbb_debug.dll”问题解决办法 .
- 关于java编译通过,运行时出错或找不到主类问题解决
- Android开发学习解决程序运行就出错的一个问题
- 关于解决“OpenGL程序运行提示glut32.dll丢失问题”
- 关于winXP和win7,vs2010,opencv2.3,运行程序,报错“计算机丢失tbb_debug.dll”问题解决办法
- MFC关于解决点击关闭,对话框仍有后台程序运行问题
- 关于ASP程序运行出现ADODB.Stream 错误 800a0bbc 写入文件失败 的解决办法!
- 今天解决了的一个DEBUG运行正常RELEASE出错的问题!
- 关于vs2002调试时提示:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装或修复调试器
- 关于VS2005编译的程序运行时提示“由于应用程序配置不正确,应用程序未能启动”的问题