`
jacally
  • 浏览: 770833 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通过压力测试排查Bug(二)--排查Bug

    博客分类:
  • JAVA
阅读更多

     最近的一个项目应用了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 关键字来防止多个线程同时访问一处代码!

      同时看出,压力测试的必要性,不进行适当的压力测试有可能发现不了更隐蔽的缺陷,尤其是多线程并发操作的应用。压力测试还能考察开发出来的系统的性能如何、运行是否稳定、是否能够满足实际应用环境的客户的访问量。

2
2
分享到:
评论

相关推荐

    bugreport-2023-04-21-175517.zip

    《Android系统故障排查:深入解析bugreport与应用日志》 在Android系统中,当遇到设备异常或应用程序问题时,通常会通过收集`bugreport`来定位和解决这些问题。`bugreport-2023-04-21-175517.zip`是一个典型的bug...

    bugreport-2023-07-31-064957.zip

    本文将深入探讨一个特定的Bug报告文件"bugreport-2023-07-31-064957.zip",以及与其相关的子文件,从中提取出关键的技术知识点,帮助开发者理解Android系统的运行状态和故障排查方法。 1. **Bugreport文件**:"bug...

    bugreport-Xiaomi 13-2024-03-24-013608.zip

    【标题】"bugreport-Xiaomi 13-2024-03-24-013608.zip" 是一个来自小米13手机的错误报告压缩包,通常用于诊断和解决设备上的软件问题。这个特定的报告可能记录了在2024年3月24日早上1:36发生的错误或异常情况。 ...

    bugreport-2022-01-10-010638.zip

    标题“bugreport-2022-01-10-010638.zip”和描述中的信息表明这是一个包含设备错误报告的压缩文件,通常用于排查和诊断Android系统的故障。日期“2022-01-10”表示报告是在2022年1月10日生成的,而时间“010638”...

    Python库 | bugbug-0.0.401.tar.gz

    "bugbug-0.0.401.tar.gz" 是一个针对Python的特定库,版本号为0.0.401,被封装在tar.gz格式的压缩包中。这种格式通常用于在Unix/Linux环境中分发软件,因为它们可以节省磁盘空间并方便传输。 首先,让我们详细了解...

    Marlin-bugfix-2.0.x

    通过这个bugfix版本,Marlin可以更好地与各种基于ARM的3D打印机主板协同工作,为用户提供更多选择。 4. **模块化改进**:在Marlin-bugfix-2.0.x中,模块化的加强意味着固件的各个组件,如运动控制、温度管理、G代码...

    findbug插件自动排查简单bug.rar

    总的来说,FindBugs插件是Java开发中一个非常有价值的工具,通过自动排查简单的代码bug,它可以帮助团队提高代码质量,减少调试时间,从而提升整体开发效率。同时,随着技术的发展,FindBugs的后续版本和类似工具...

    bugreport-2024-06-03-125428.zip

    通过对这些文件的分析,我们可以推断这是一次涉及多个MIUI系统组件和应用的故障排查过程。开发团队会通过这些日志来定位导致错误的具体代码行、系统状态、异常堆栈等信息,以便修复软件bug并优化用户体验。每个日志...

    bugreport-2024-03-24-010641.zip

    通过以上分析,我们可以看出,bugreport不仅是定位和解决软件问题的重要依据,也是优化系统性能、提升用户体验的基础。在处理类似“bugreport-2024-03-24-010641.zip”的问题时,需要具备深厚的系统分析能力,以及对...

    cat2bug-jlog Java错误日志收集框架

    总结,cat2bug-jlog是Java开发领域的一个强大工具,它通过实时收集、智能分类和详尽统计等功能,提升了企业应用的运维效率。了解并掌握cat2bug-jlog的使用,无疑能帮助开发者更好地应对复杂的应用场景,实现高效的...

    bugreport-mars-RKQ1.201112.002-2023-10-03-12-09-27.zip

    《Android系统故障报告详解——基于"bugreport-mars-RKQ1.201112...对于Android开发者和故障排查人员来说,掌握如何解读这样的bugreport至关重要,因为它能直接引导他们找到问题的症结所在,从而进行有效的修复和优化。

    bugreport-grus-RKQ1.200826.002-2023-08-23-16-12-57.zip

    "bugreport-grus-RKQ1.200826.002-2023-08-23-16-12-57.zip"是一个全方位的故障诊断工具包,通过对这些子文件的分析,开发者可以定位并解决Android设备的各种问题,从硬件故障到软件异常,从系统版本不兼容到应用...

    Bugfix - Feature03-12 可以通过NOC查询设备告警

    "Bugfix - Feature03-12 可以通过NOC查询设备告警"这一特性着重解决了运维人员在处理设备故障时的效率问题。下面我们将详细探讨这个功能点及其相关知识点。 首先,NOC的主要职责包括网络监控、性能分析、故障排查和...

    bugreport-LIO-AN00-HUAWEILIO-AN00-2024-05-29-13-24-40.zip

    标题中的"bugreport-LIO-AN00-HUAWEILIO-AN00-2024-05-29-13-24-40.zip"表明这是一个华为设备(HUAWEI LIO-AN00)的bug报告压缩文件,日期为2024年5月29日,时间是13:24:40。这种类型的文件通常包含了系统故障或错误...

    bugreport-2023-12-30-003604.zip

    《Bugreport 文件解析:深入探究 Redmi K50 Pro 的系统日志》 在IT行业中,bugreport 是一种至关重要的工具,它记录了设备在特定时间点的各种系统状态信息,帮助开发者诊断和修复问题。本篇文章将围绕"bugreport-...

    bugreport-Mi 10-2023-10-08-192254.zip

    本篇文章将围绕"bugreport-Mi 10-2023-10-08-192254.zip"这个压缩包文件,深入探讨其包含的关键信息,以及如何利用这些信息来理解设备状态和排查故障。 首先,文件名"bugreport-Mi 10-2023-10-08-192254.zip"表明这...

    bugreport-Mi 10-2023-08-08-232151.zip

    可能包含了以二进制格式存储的更详细日志数据,需要解码才能查看具体内容,通常用于高级故障排查。 8. **lshal-debug**: lshal是Linux系统中用于查询硬件信息的工具,"lshal-debug" 可能是该工具输出的调试信息...

    bugreport-Redmi K40-2024-01-05-193350.zip

    本篇文章将深入剖析“bugreport-Redmi K40-2024-01-05-193350.zip”这一错误报告,揭示其中的关键信息,以助于故障排查和系统优化。 首先,我们看到的文件名“bugreport-Redmi K40-2024-01-05-193350.zip”表明这是...

    bugreport-Redmi K60-2024-04-01-085033.zip

    通过比对不同时间点的bugreport,可以追踪问题的发展趋势,从而定位并解决问题。 在实际操作中,开发者和维护人员会使用各种工具和方法来解析这些数据,例如使用logcat工具查看日志、用adb命令行工具分析bugreport...

    bugreport-Redmi K60 Ultra-2024-04-20-220634.zip

    通过这份bugreport,我们可以深入探究设备在运行时的性能表现、功耗情况以及可能存在的软件问题。 3. **故障排查与修复**: 当设备出现异常时,bugreport是诊断问题的关键工具。例如,如果用户报告电池续航问题,...

Global site tag (gtag.js) - Google Analytics