最近的一个项目应用了Acegi作为安全框架,项目试运行期间出现了一个隐藏比较深的Bug:当运行一段时间之后,对于URL资源串的控制功能失效!在更新了acegi最新版本后仍没有排除该Bug。
因为该Bug的发生需要在运行一段时间后才会发现,排查起来比较困难,因此需要通过测试工具进行一定时间的压力测试以后来重现故障的发生!
在 通过压力测试排查Bug(一)--测试过程 中我把测试的步骤介绍了一下,下面我将该Bug的排查过程介绍一下,以供参考:
通过MyEclipse的调试模式运行的Web应用程序,可以通过设置断点进行单步调试,设置断点很容易,只需要在代码行之前(行数标注上)双击鼠标左键即可。当程序运行该代码处即会暂停运行,你可以在Debug模式窗口中观察程序运行状态。
因为acegi对url的控制是在filter中进行的,所以我将断点设置在了继承了AbstractFilterInvocationDefinitionSource的自定义filter中:
通过观察断点处的变量值,发现urls变量的值不正常,该值应该是在后台管理的所有URL资源才对,现在全部变成了多个一样的同一个URL,问题就出在了这里!什么导致了变量值的紊乱呢?以下方法引起了我的注意:
//倒叙排序所有获取的url
orderUrls(urls);
/**
* 把url资源按倒序排序
* @param urls
*/
private void orderUrls(List<String> urls) {
Collections.sort(urls);
Collections.reverse(urls);
}
该方法对urls按照字母顺序进行了倒序排序,因为Collections.sort是静态方法,在执行时,值参应该是在一处内存地址上操作,因此并发操作时,一定会产生互相干扰重叠的排序操作,造成了urls变量值的紊乱!
因此我将该方法前加上了synchronized关键字,防止多个线程同时访问这个方法。
/**
* 把url资源按倒序排序
* @param urls
*/
private synchronized void orderUrls(List<String> urls) {
Collections.sort(urls);
Collections.reverse(urls);
}
再经过一轮的压力测试,没有再出现类似的问题,至此该Bug成功消除!
出现的这个缺陷提醒我们,以后编程时一定要注意线程并发操作的影响,在有影响的位置注意使用synchronized 关键字来防止多个线程同时访问一处代码!
同时看出,压力测试的必要性,不进行适当的压力测试有可能发现不了更隐蔽的缺陷,尤其是多线程并发操作的应用。压力测试还能考察开发出来的系统的性能如何、运行是否稳定、是否能够满足实际应用环境的客户的访问量。
分享到:
相关推荐
findbug插件,自动排查简单的代码bug
MySQL数据库疑难杂症排查.pptx
调试是程序编写中很重要的一步,有时遇到bug却不知,本文将一一解释它们
airtest+pycharm自动化测试案例,能批量执行测试用例,然后生成聚合报告,如果执行失败了,还能点击去看详细的执行情况,完整的代码和环境部署,也稍微结合一下如何提交代码,使用了github作为一个例子,完整讲述...
用于web开发时浏览器查看调试错误和bug
单元测试的好处? 通过单元测试,可以尽早的发现程序的BUG,便于后期的开发及调试,维护。可以使得程序更加健壮,我们对自己的代码也更加有信心,也便于问题的排查与定位。
bugfree安装配置及常见问题,java环境变量配置,以及怎么排查问题步骤。
场测试、与核心网联合排查最终发现核心网网元 BUG 并完成修复,恢复测试卡 语音业务正常。单站验收过程中,发现测试卡数据业务正常,语音业务无法正常使用,具体 为测试卡做主叫网络回落至1x,无法正常回落VoLTE进行...
前端监控系统做这个项目的初衷是最近在工作中,遇到很难跟踪的bug。很难跟踪是后端问题还是前端问题。看似前端问题,但是自己试了很多次问题都没问题;后端查日志,也看不出问题。所以想做一个前端监控系统,主要...
在一个嵌入式软件项目中,需要对温度传感器采集的数据进行处理。传感器温度范围是-20到180℃,出现非对称数据溢出Bug,对其排查和优化。Demo工程如上。
年年出妖事,一例由JSON解析导致的"薛定谔BUG"排查过程记录.doc
前几天东政同学反馈说Linode服务器快卡死了,今天有时间排查了一下具体原因,最终原因稍微有点悲壮:file_get_contents没有设置超时时间,加上我用的php5.2关于curl的代码有个bug,于是导致PHP进程进入死循环。...
修正:解决了繁体中文版系统中程序显示乱码的BUG(感谢网友Jay@nfs反馈); ----------------------------------------------------------------------------- 【更新说明】: 2010.12.3 更新:增加了自动判断...
当线上有 bug 需要排查 bug 时,要最终定位到是哪个类的哪几行代码造成的这个 bug,此时就需要去看到底是哪一次提交的,是谁对这几行代码的修改造成了这次线上 bug,需要去定位责任人,发生时间等。 如果是比较严重...
二、功能测试 1,工作中所遇到的错误 2,测试流程: 3,测试计划元素: 4,测试报告元素: 5,测试点: 6,测试方法: 7,bug相关问题 8,adb常用命令 9,软件测试原则 10,测试用例编写的要素 11,测试用例的设计...
- [系统优化] 安装“Rewrite规则错误”智能排查诊断 - [系统优化] 后台操作优化为文字按钮显示 - [系统优化] 页面刷新链接优化(兼容微信页面不能刷新问题) - [系统优化] 后台表格显示优化 - [系统优化] 升级...
- [系统优化] 安装“Rewrite规则错误”智能排查诊断 - [Bug修复] 商品页面访问不存在的商品出现问题 - [系统优化] 页面刷新链接优化(兼容微信页面不能刷新问题) - [系统优化] 升级禁用create_function函数 - ...
记一次莫名其妙的网站失去响应排查。之前网站一直是使用nginx做代理后端的apache运行php来提供服务。apache经常会不定期不定时间的出现不能服务失去响应,然后nginx出现”504 Gateway Time-out”查看错误日志也看不...
在一个嵌入式软件项目中,需要将一组16位的数据,按照高低字节拆分成8位的。在使用Simulink中的Extract Bits模块构建字节分割子系统时出现了Bug,对其排查和优化。Demo工程如上。