解决问题心得

自从接手公司平台到现在已有一年半年之久,在期间一直以解决客户、平台问题为主,也是我成长最快的一年,经统计大概解决的问题不下五百,其中问题种类多,有难有易。在解决问题上不谦虚的说自有一番心得,特此总结,一来梳理回顾过去是如何发现问题,解决问题的思路,二来以备忘记。

在这一年半主要解决问题大概分为如下几大类,中间件、浏览器兼容、操作系统、java虚拟机、jdk、数据库、IDE、webservice。各个问题各自关联各自影响。其中中间件兼容常见问题一般是包冲突,请求乱码,数据源操作数据库引发数据库死锁(这个问题主要是在使用金蝶中间件过程中遇到的,现象是使用jdbc 直连接正常在这里为什么要使用jdbc直连测试,是为了排除jdbc驱动包的原因。使用数据源对数据库进行操作不提交不释放锁,不过大家可以放心,使用标准的数据源工具是不会有这个问题的,据了解金蝶有对数据源进行了重写)。在中间件中还有就是集群session共享、jsp编译、不能远程访问等等问题。而浏览器兼容问题一般情况都会与javascript相关。能写出更好兼容的javascript代码需要有一定功底。但我们解决问题就不需要了,只需要能有这方面的意识即可。常见与操作系统有关的问题那就是环境变量设置有关了。其他不至于人品那么差了。java虚拟机一般就是内存溢出,线程溢出这个问题一般好解决就是针对不同的异常来进行设置,解决这个问题一般设置完加大参数即可但前提要求主机配置性能得到达一定要求,jdk的话一般也包含了jvm的问题这个一般有版本不同、供应商不同而引发的问题。还有就是版本不同所提供到的支持也不一样。例如在jdk1.5中是对内存有最大的限制,数据库的话那一般就是死锁、连接失败、连接会话不够,大小写、字符编码、用户权限等等问题。

很难说有固定的模式固定的方法能解决平时开发中遇到的所有问题,但思路是不变的,一般思路是,分析问题(一般可以通过看日志调试代码)、采用对比排除法缩小产生问题的原因的范围,找到问题的本质、在解决问题。现象一样但引发问题的原因可能并不一样,问题原因是因环境改变而不同,解决问题的大忌就是慌张,心态很重要。每个问题都有其根本的原因,只有抓住了问题的根本原因才能解决问题。如果硬是解决不了可以通过其他的手段绕过其问题寻求其他方法实现现在的功能。

有些问题看上去很难其实反而很简单,经常有人跟我反映,系统运行一段时间久卡在了很久没有反映只有重启中间件才能正常操作,而且这个问题也不是每次都出现。碰到这样的问题,应该第一反应就是看日志,二看数据库,看看是不是数据库因死锁了导致系统线程停止。根据日志提供的信息分析问题是如何产生的。然后就是不断缩小引起问题的范围最后落实到一段代码一个配置一个参数上面。例如这几天有个同事向我反映在IE6下使用软航在线编辑器修改流程正文(word)在节点1出修改后提交到节点2在节点2中可以看到修改的内容但在节点1出还显示的没有修改之前的。通过我同事对问题的反映我肯定的是这个问题跟软航无关因为如果软航有问题的话那在节点2应该看到的也是没有修改之前的。然后我也让我同事帮我确定了下在节点1上修改保存不提交关闭在打开看看能不能看到修改之后的反映是可以的。结合系统本身那就可以通过查看代码在分析锁定代码,很快就把这个问题解决了。