在最新一期的瑞士电脑杂志中,我们列出了这些年,用我们的客户端所遇到的10
个影响性能的突出问题。我希望这个列表能够给大家启发。同时,为了更好的了解怎样解决这些问题,我引入了这些博客的链接。
#1 调用数据库过多
我们见到的最多的问题是,每次请求或事务,查询数据库的次数太多。这有3种特殊的现象来证实。
-
在当前事务的上下文中,请求的数据多于实际需要的数据。例如:请求所有用户
信息而不是那些我们要显示到当前屏幕的信息。
-
同样的数据被请求多次。这通常发生在不同的组件在同一个事务中彼此独立的调
用,并且每次都请求同类数据。因为不知道哪种类型的数据已经加载到当前的上下文中,最终导致多次相同的查询。
-
为了取得一特定的数据集执行多次查询操作。这通常是因为没有充分利用复杂
sql语句的优点或存储过程导致的。
想了解更多,请查看:
Blog on Linq2Sql Performance Issues on Database
, Video on Performance Anti-Patterns
#2 同步死锁
毫无疑问,同步在应用中保护共享数据是十分必要的。但有很多开发者犯了过度使用同步的错误。例如:大量的代码序列被同步。低负载(开发者本地的机器上)时
性能不会出现问题。在高负载或生产环境中,同步过度使用会导致服务器性能和扩展性问题。
想了解更多哦,请查看:How to identify synchronization problems under load
#3 与远程通道对话过多
很多类库出现使得远程通信看起来小菜一碟。开发者调用本地和远程方法几乎没有什么不同。对远程调用的缺乏了解,使得大家
忘了
随着每次远程调用产生的诸如延迟、序列化、网络传输和内存消耗等问题。简单的使用这些技术导致这些远程边界穿插太多的调用,最终导致性能和扩展性问题。
想了解更多,请查看:
Performance Considerations in Distributed Applications
#4 错误的使用O/R-Mappers
对象关系映射卸下了开发者肩膀上的重担--
加载和在数据库中持久化对象。任何一种框架通常有很多配置选项来优化应用用例的对象关系映射的使用。错误的配置和不正确的使用框架本身过多,导致使用这些
框架的不可预料的性能和扩展性问题。确保你自己熟悉所有的配置项并且了解你所依靠的类库的内部。
想了解更多,请查看:
Understanding Hibernate Session Cache
, Understanding the Query Cache
, Understanding the Second Level Cache
#5 内存泄漏
运行时环境的管理,像Java和.NET都有垃圾回收器帮助进行内存管理。但是,垃圾回收器却不能阻止内存泄漏。被遗忘的对象会驻留在内存中,最终导致内
存泄漏出现OutOfMemoryException。及时的释放掉对不再需要的对象的引用很重要。
想了解更多,请查看:
Understanding and finding Memory Leaks
#6 第三方代码或组件的问题
没有人靠自己写一个新应用的所有功能。我们使用第三方的类库来加快我们的开发进度。我们在加快我们输出的同时,也增加了由这些组件带来的性能风险。尽管多
数的框架有很好的文档且经过十分彻底的测试,但不能保证这些框架适用于所有情况。他们经常被不正确的使用,或不经过测试就使用。所有,在引入你的代码之
前,要对所有这些框架进行深入的检查。
想了解更多,请查看:
Top SharePoint Performance Mistakes
#7 稀少资源的浪费使用
像内存、CPU、I/O或数据库这类资源都是稀少的。对这些资源的浪费使用导致其他人不能调用这些资源,最终导致性能和扩张性问题。举个例子:数据库连接
时间太长。连接应该只有在真正需要的期间段使用。例如,查询时连接,然后把连接归还给连接池。我们经常看到在处理请求很早之前就请求连接,并且直到最后也
没有释放连接,这就导致瓶颈现象的出现。
想了解更多,请查看:
Resource Leak detection in .NET Applications
#8 臃肿的WEB前端
由于网络的高速接入,用户有了更好的用户体验。不好的趋势是很多应用打包的东西太多,他们变得臃肿,最终导致浏览器出现错误。那些还没有高速网络接入的用
户会遇到这样的问题会最多。图片过大过多,错误的使用浏览器的缓存,过度的使用JavaScript或Ajax,所有这些都会导致浏览器的性能问题。按照
已有网站的成功案例来优化能解决这些问题。
想了解更多,请查看:
How Better Caching would help speed up Frankfurt
Airport Web Site
#9 错误的缓存策略导致垃圾回收过度
把对象在内存中缓存,来避免持续的对数据库的反复调用是提升性能的一种方法。缓存太多的对象,或者缓存的对象不是经常使用,会把缓存的优点变成缺点,因为
消耗的内存过多并且增加了GC的活动。在实现一个缓存策略之前,有应该知道那些对象应该缓存,哪些对象不应该缓存来避免这些性能和扩展性问题。
想了解更多,请查看:Java Memory Problems
, Identify GC Bottlenecks in Distributed Applications
#10 间歇性问题
间歇性问题很难被发现。这些问题在输入特殊参数或一定负载时才会经常出现。测试覆盖要全面,功能测试、负载测试和性能测试都要覆盖到。这样才能在成为最用
用户遇到的问题之前发现这些问题。
想了解更多,请查看: Tracing Intermittent Errors by Lucy Monahan from Novell
,
How to find invisible performance problems
(附加问题)#11 昂贵的序列化
使用远程通信,像Web Service,RMI 或
WCF。对象需要被调用者序列化来在网络中传输。网络另一端的被调用者需要在使用这个对象前反序列化。传输时两端都这样做的话会导致一些资源消耗。知道两
端需要什么类型的序列化,哪种序列化和传输类型是最优的很重要。不同类型的序列化对性能、扩展性、内存使用和网络传输会产生不同的影响。
想了解更多,请查看:Performance Considerations in Distributed Applications
本文摘自:http://blog.dynatrace.com/2010/06/15/top-10-performance-problems-taken-from-zappos-monster-and-co/
翻译的不好,见谅。
分享到:
相关推荐
项目部署前应完成合理规划,确保新项目能在现有环境中稳定运行,避免因资源不足导致的性能问题。 2. **Java EE中间件环境规范不足** - 不完善的中间件或基础架构规范可能导致系统稳定性降低,增加运维成本。在项目...
10个影响Java EE性能的常见问题 达内java培训的老师感觉不错,分享给大家
Oracle 性能问题总结 ...* 多使用 Commit 语句:在一个事务中,避免大批量修改的,这样可能由于不断扩充回滚段而影响性能 * 在写完一条 SQL 语句后,使用适当的工具(如 Explain plan)检查 SQL 语句的性能
由于LoadRunner默认每隔10秒收集一次数据,这个频率可能会对数据库性能产生影响,我们可以调整vmon.cfg文件中的samplerate来修改这个频率。 9. 如果需要收集自定义的性能数据,我们可以在vmon.cfg文件中修改并添加...
数据库性能问题是许多IT系统面临的常见挑战,特别是在...不过,解决性能问题通常需要综合考虑多个方面,可能需要反复迭代和测试。记住,每个系统的具体情况都不同,因此最有效的解决方案往往需要结合实际情况进行定制。
### Redis消息大小对性能的影响分析 #### 概述 Redis是一种高性能的键值存储系统,广泛应用于缓存、消息队列等多种场景。在实际应用中,消息或数据包的大小对于Redis的性能有着显著的影响。本报告通过实验数据具体...
在JavaEE应用开发中,性能优化是一个至关重要的环节,因为性能问题可能导致系统响应慢、资源浪费以及用户体验下降。以下是对影响JavaEE性能的十大问题的详细分析: 1. **缺乏正确的容量规划**:在项目启动初期,应...
### 服务器端编程的十大性能问题详解 #### 一、过多的数据库调用 在服务器端编程中,频繁地向数据库发起查询是非常常见的性能瓶颈之一。这种行为可能会导致以下几种情况: - **请求的数据量超出实际需求**:例如,...
具体来说,相位噪声会导致以下几个方面的问题: 1. **降低信噪比**:相位噪声会增加背景噪声水平,降低信号的信噪比。 2. **降低解调质量**:高相位噪声会导致解调过程中出现更多的误码或错误。 3. **影响时延稳定...
3. **System Monitor (SMON)**:SMON负责定期执行数据库维护任务,如空间管理、回滚段清理等,其行为可能影响性能,需要关注其运行时间和频率。 4. **Trace文件**:当遇到性能问题时,可以通过启用Trace来获取详细...
10、CIFAR-100和SVHN这三个标准数据集的大量实验,作者发现,在保证网络总参数数量大致相等的前提下,提高网络中高层(较高层次)的参数数量有助于提升模型的性能,而增加底层(较低层次)的参数数量则可能对性能...
信号完整性对通信系统的电气性能影响显著,特别是在10Gbps及以上速率的高速产品中,PCB插入损耗(Insertion Loss)的监控成为了产品研发和量产过程中管控的重点指标。因此,研究高速PCB损耗性能及其影响因素,对优化...
在Java服务器的开发和运维过程中,性能问题是一个关键的考虑因素,尤其是在高负载环境下。解决此类问题需要深入理解服务器性能分析的概念和工具,以及如何在模拟环境中有效地测试和优化。 文章中提到的“可控的环境...
预防性能问题的关键在于充分的前期规划和持续的性能监控。一旦发现问题,应迅速定位原因,采取针对性措施,如优化代码、升级硬件或调整系统配置。 ### 35. Vuser_init()和Vuser_end()函数的作用 Vuser_init()函数...
异常机制提供了统一的错误处理方式,有利于编写清晰的代码,但过度使用或不当处理可能会导致性能问题。因此,开发者应合理使用异常,遵循异常处理的最佳实践,确保在保障程序稳定性和可维护性的同时,兼顾性能需求。
680/20原则是指解决20%的性能问题可以解决80%的性能问题。这意味着,开发者应该集中解决最重要的性能问题,而不是分散解决所有问题。 9. 参与优化过程的三个关键职能 参与优化过程的三个关键职能是美术、技术美术...
本文主要针对这个问题进行深入研究,通过对960nm半导体激光器阵列的实验分析,揭示了应变对独立发光点性能的具体影响。 研究团队采用微通道水冷封装技术,设计了一款包含38个发光点、腔长2mm的激光器阵列,在600A...
性能测试人员应具备强大的逻辑思维能力和分析能力,以便从代码层、应用层、OS层等多个层面识别性能问题。在测试过程中,需要考虑到业务知识的涉猎,因为不同的业务场景对性能的要求是不同的。 性能测试的实施和控制...