同步是一种很必要的机制用来控制对共享数据的访问。尤其在用户很多的情况时,例如:像web应用这样,相同的代码可以同时被多个线程执行,取保数据访问被保护是十分重要的。无论是Java或.NET,在使用锁或同步时都提供了相同的性能指标。这里有一些文章值得一读:
-
.NET 2.0 Performance Guidelines – Locking and
Synchronization
-
Thread Synchronization and the Java Monitor
一个识别同步问题的简单方法
我试图找到一种简单的方法来识别多线程中执行的代码中的同步问题。在我的应用中,我有几个方法和组件同步访问共享数据。代码是作为Web应用的一部分来执行的。越多的用户同时访问页面,独立的线程访问同步块所需的时间可能会更长。对于我来说,问题在于:
-
我的哪个方法由于同步原因而影响到了整个系统的性能?
-
影响性能到什么程度?
-
我的应用中还有其他的代码存在相同的问题么?
回答上述问题的一个方法,尽管不是百分之百准确,但是很容易执行。我只是取得某一方法、组件或框架的CUP时间和方法执行的时间。下面我对这两个参数做下解释:
-
CPU时间:代码执行所需花费的CPU时间。
-
执行时间:是方法执行所花费的总的时间。包括花费在CPU、I/O、等待其他系统响应、垃圾回收所花费的时间和进入同步的代码块所等待的时间。
我增加Web应用的负载并把这些值做成表格。我把CPU时间和它的运行时间做比较。对这两种值的比较显示出了等待I/O、其他系统或等待进入同步的代码块所需的时间。因为这个差值不只包含同步时间,所以如同我上面所说,这个方法不是百分之百准确。尽管不是100%准确,但是它给你指出了你的代码哪处需要等待。如果你刚好知道你的代码不需要外部数据库调用或不做任何I/O操作,就差不多能确保这就是同步花费的时间。
我的例子
我使用dynaTrace
来订阅我要分析方法的执行时间和CPU时间。然后我用一个负载测试工具对我的Web应用做模拟负载测试,点击执行有问题代码的页面。在我的测试场景中,我使用SilkPerformer
显示如下:
从这些结果中我抓取了一些方法层的结果。下面的图片显示CPU时间(绿色)只是有些细微的增长,但执行的时间和我的页面的总体响应时间保持同样的增长。注意下图对CPU时间和执行时间用了不同刻度比例,让他们差异更显而易见。
下面的图片是对这两个数值采用相同刻度比例的图片:
测试结果的解释
事实上我的方法执行的总时间增加的非常迅速,但CPU时间几乎没有变,这说明我的方法在可能在等待I/O、其他系统或同步代码块上花费了很重要的时间。
从方法扩展到组件或框架来分析
如果你的工具可以抓取一个完整组件或一个框架库的CPU时间和执行时间,这个方法同样可用。下面的图片是对.NET远程组件抓取的时间.
结论
这是一个你能够用来识别你哪处代码花费了大部分时间等待同步或其他系统响应。
本文摘自:
http://blog.dynatrace.com/2009/04/02/performance-analysis-how-to-identify-synchronization-issues-under-load/
翻译的不好,见谅!
分享到:
相关推荐
- **系统性能评估**:负载测试可以确定系统在不同负载下的性能,帮助识别瓶颈,优化资源分配。 - **稳定性验证**:通过模拟真实世界的大流量场景,测试系统的稳定性和可靠性。 - **容量规划**:了解系统在高负载...
总的来说,解决Java服务器性能问题涉及多个层面,包括但不限于:创建真实的负载模拟环境,选择合适的性能分析工具,监测和优化内存使用,处理同步竞争,以及持续跟踪性能变化。只有通过系统的分析和测试,才能找到并...
源码在游戏性能分析中扮演着关键角色,因为只有通过查看和理解源代码,开发者才能精确地找到性能问题的根源。源码分析工具通常提供诸如代码剖析、函数调用堆栈、内存分配追踪等功能,帮助开发者定位代码中可能导致...
"性能测试诊断分析与优化"这一主题涵盖了多个关键知识点,包括测试策略、性能瓶颈识别、问题定位以及优化方法。以下是对这些知识点的详细阐述: 首先,性能测试是验证系统在高负载或大量并发用户情况下是否能稳定...
性能分析是IT领域中至关重要的一个环节,它主要关注系统、应用或硬件在运行时的效率、响应时间和资源利用率等方面。对于"51CTO下载-23.性能分析基础知识"这一主题,我们可以深入探讨以下几个关键知识点: 1. **性能...
因此,需要一种能够实时识别负载转动惯量并据此调整控制器参数的方法来确保系统的稳定性和精度。 #### 负载转动惯量的在线识别 本文提出了一种基于模型参考自适应方法的识别策略。通过该方法,可以实现在电机运行...
5. **并发控制**:分析并发访问时的锁竞争、线程同步等问题,以改善多线程环境下的性能。 6. **缓存策略**:评估和改进缓存机制,如使用更有效的缓存算法或调整缓存大小,以减少不必要的计算和数据读取。 7. **...
使用性能分析工具可以帮助识别代码中的热点,找出锁竞争最激烈的地方。同时,理解并发编程的原理,如活锁、死锁、饥饿等问题,也是优化同步代码的关键。 总之,理解和优化Java同步方法的使用,是提高多线程应用程序...
SharePoint网站文档存储性能分析主要关注的是在Microsoft Office SharePoint Server 2007环境下,处理大量列表时的系统性能表现。这篇由Steve Peschka撰写的白皮书详细记录了微软进行的一系列性能测试,旨在揭示在...
- 分析测试结果,识别性能问题,并遵循特定的分析原则。 - 诊断性能问题,例如数据库查询效率低、线程同步问题等,并提出解决方案。 8. **性能调优**: - 遵循调优基本原则,如最小化资源消耗、优化算法等。 - ...
3. 性能优化:通过负载均衡,可以提高网络响应速度和整体性能,提升用户体验。 4. 扩展性:随着业务增长,负载均衡技术可帮助轻松扩展服务器集群,适应变化的需求。 5. 安全防护:负载均衡器可以作为安全层,过滤...
利用这些报告的详细数据和分析功能,可以识别和优化那些拖慢数据库性能的操作或配置问题,从而提高数据库的整体运行效率。同时,Oracle还提供了社区支持,用户可以在MyOracleSupportCommunity上提出问题、获取帮助并...
CPU与内存的性能分析 CPU性能受限可能由算法效率低下、多线程调度不当等原因造成;内存瓶颈则可能源于内存泄露、频繁的垃圾回收等。对这两者的深入理解有助于更有效地优化系统性能。 ### 34. 预防和解决性能问题...
在Java性能分析领域,开发者需要深入理解程序运行的效率,以优化系统性能并解决潜在问题。本文将基于标题“Java性能分析”展开讨论,结合标签“源码”和“工具”,探讨如何通过分析源代码和利用相关工具来提升Java...
1. **程序分析**:首先,编译器对源代码进行分析,识别可以并行化的部分,以及潜在的同步需求。 2. **同步点定位**:确定需要同步的位置,例如数据依赖或控制流依赖的地方。 3. **同步粒度调整**:根据程序特性调整...
- 分析测试结果,识别性能问题。 6. **LoadRunner组件**: - 主要由Virtual User Generator(VUGen)、Controller和Analysis三部分组成。 - VUGen用于录制和编辑测试脚本。 - Controller用于设计和执行测试场景...
2. **网络截包工具**:如Wireshark,用于查看和分析网络数据包,帮助识别性能问题。 **性能脚本开发** 1. **录制回放**:快速创建脚本,模拟用户操作。 2. **脚本调试**:找出并修复脚本中的错误。 3. **LoadRunner...