论坛首页 海阔天空论坛

曾经发生在身边开发过程中的灵异事件

浏览 23136 次
该帖已经被评为精华帖
作者 正文
   发表时间:2006-10-27  
  这些年的开发过程中,稀奇古怪的问题没少遇到。所谓常在河边走,早晚遇见鬼。
  举几个例子,当年用IP卡打电话太多太勤,竟然有好几次在打完电话之后,发现卡上的余额一点没少!肯定是电信的计费系统有问题,哼哼,被他们剥削了这么久,占他们一点便宜也心安理得!听说现在经常还有个人银行卡莫名其妙多钱少钱的事情,觉得银行的系统也不过尔尔。

分享几个我曾经遇到的几个怪问题,比较有难度和迷惑性。可有同道也遇到过类似的奇怪问题?
动用你智慧的大脑,先分析一下这几个事件的原因。稍后我会给出最终的解决方式,但不一定是正确的和最好的。集思广议先。
问题一、客户无法登录系统
  貌似,这不能称得上是一个问题吧?按常理,无法登录,那肯定server端出问题了,或者是程序,或者是数据库。再不济,也是客户自己的原因。
  话说在2002年的某一天,公司网站(apache+php)出现了全国约一半的用户无法登录的情况,输完用户名和密码就报“该页无法显示”(恨人啊,你要再说得详细点也好),但是在我们公司内部,是可以正常登录的。不能登录的用户分布在全国各个地区,但不解的是,在同一个地区,竟然也有部分用户能登录部分不能登录的情况。这是怎么回事?大家都是一头雾水。要说server端有问题吧,又有一半的用户能登录。要说那一半不能登录的用户客户端或网络的问题吧,可是他们的情况不一,分散全国各地,怎么会这么巧合呢?再说B/S结构,客户就是只需要浏览器的嘛。
  亲自到北京的一个客户那里去,在他们的电脑上试了一下,还真是报这样的错误(试着登录了几十次,竟然有一次还登录成功了,怪)。
  why??

问题二、数据库事务部分失效
  一个系统中有一个数据导入的模块,一直运行得很正常很正常。突然有一天,客户反映最近有一部分数据经常丢失,导不进去。甚为惊讶,不应该啊,我们是开启了事务的,要导就全导进去,或者全部无法导入,怎么会出现只导入一部分数据的情况呢?而且,把数据拿到我们这边的测试环境中,一点问题也没有啊。只好亲自到客户那边,自己一试,还真是会少一部分数据。而且每次少的数量都不一样,就是没有一次全部导入的!
  检查代码,事务开启/执行sql/提交/回滚,没问题。
  在运行过程中跟踪每一条导入数据的sql语句,没有发现哪一条sql报错。最后也正常执行了commit。
  把所有的sql打印出来,统一放到sql客户端去手工执行,数据全部导入,一条不少!
  代码也没问题,sql也没问题,事务也没问题,那问题还是出现了,why??
  [数据库是sqlserver2000]

问题三、系统的查询统计速度极慢
  一个决策支持系统,主要做统计分析,数据量虽然很大(10几个G),但运行得一直很稳定,速度也还不错。但突然有一天,客户反映统计分析的速度变得极慢,慢到无法使用。
  到现场,代码没问题,并且一直没动过。那就处理数据库吧,重建索引,不行;重新部署安装环境,不行;重新安装sql server,不行。
  把统计分析的代码取出来,到sql客户端执行,速度挺快的嘛!为什么同样的代码,在程序里执行就那么慢呢?
  why??
  [数据库是sqlserver2000]

问题四、表单信息无法提交
  由于客户众多(几万家),所以报的错也是五花八门。
  有一个表单提交(post),有很多小数据项,大概有三四十项的数据吧。提交后台保存,一般都没什么问题。但是就是有几个客户反映,他们一提交,后台程序就报错(前台javascript并没报错),提示他们要先输入数据。我们这边做测试,填入和客户一模一样的数据,不报错啊!怎么回事?
   发表时间:2006-10-27  
搞不懂,有意思!呵呵
0 请登录后投票
   发表时间:2006-10-27  
1.你应该在服务端记录详细日志,以帮助定位错误。这是一个良好软件必备的功能,不能期望总有Debug环境给你使用,正在使用中的web软件是不能总为你停机或调试的。

2.看上去...象是数据库本身的问题。当然这个几率不大,不过也不是完全不可能。我就碰到了Oracle 9i提供的JDBC驱动的问题,xxxg.jar换为xxx.jar就可以了。那个g似乎表示的是debug版本。

3.这个看来...我怀疑是代码有其他耗时的部分。或者两者执行时数据库负载不同。原因太多了...

机器很可能表现出诡异,但只要深入研究,细心观察不同之处,一般是能查出原因的。
0 请登录后投票
   发表时间:2006-10-27  
  难道代码中也藏着鬼?
0 请登录后投票
   发表时间:2006-10-27  
2 的确碰见过,可惜忘了是怎么解决的了:(
0 请登录后投票
   发表时间:2006-10-27  
Lucas Lee 写道
1.你应该在服务端记录详细日志,以帮助定位错误。这是一个良好软件必备的功能,不能期望总有Debug环境给你使用,正在使用中的web软件是不能总为你停机或调试的。


好的建议!但是本错误,与此无关。还没有牵涉到server端。提示词汇:apache+php

引用

2.看上去...象是数据库本身的问题。当然这个几率不大,不过也不是完全不可能。我就碰到了Oracle 9i提供的JDBC驱动的问题,xxxg.jar换为xxx.jar就可以了。那个g似乎表示的是debug版本。

思路对头。但遗憾,我们试过,非正解。还需要再努力。数据库是sqlserver。
引用

3.这个看来...我怀疑是代码有其他耗时的部分。或者两者执行时数据库负载不同。原因太多了...
机器很可能表现出诡异,但只要深入研究,细心观察不同之处,一般是能查出原因的。

已经禁止所有其他用户访问,并发数为一。代码可以肯定没问题。

欢迎google
0 请登录后投票
   发表时间:2006-10-27  
2 的确碰见过,可惜忘了是怎么解决的了:(
0 请登录后投票
   发表时间:2006-10-27  
1的情况遇到过一次,某个系统大约一半用户无法登录,被客户召唤到现场,调试了半天程序没发现原因。最后发现是双机热备的问题,一台服务器失效了
0 请登录后投票
   发表时间:2006-10-27  
Eden 写道
1的情况遇到过一次,某个系统大约一半用户无法登录,被客户召唤到现场,调试了半天程序没发现原因。最后发现是双机热备的问题,一台服务器失效了

这是一种可能。

但我们的系统apache+php,没有使用集群和负载均衡。就是单服务器。
0 请登录后投票
   发表时间:2006-10-27  
非常棒,这是真正有价值的帖子。

建议大家多多跟贴,提供自己身边的案例。
0 请登录后投票
论坛首页 海阔天空版

跳转论坛:
Global site tag (gtag.js) - Google Analytics