服务器端编程的十大性能问题

原文html

http://www.infoq.com/cn/news/2010/08/top10-server-side-performance前端

今年5月底,瑞士计算机世界杂志刊登了Web性能诊断专家Bernd Greifeneder的一篇文章,文章列举了其在过去几年工做中所遇到的服务器端编程的十大性能问题。Andreas Grabner则在本身的博客上对这些性能问题给出了进一步阅读的连接。但愿这些问题与相关的延伸阅读能为广大的InfoQ读者带来必定的启示。java

问题一:过多的数据库调用web

咱们发现常常出现的一个问题就是在每次请求/事务中存在过多的数据库查询。有以下三个场景做为佐证:sql

  • 在一次事务上下文中所请求的数据比实际须要的数据多出不少。好比说:请求全部的帐户信息而不是仅仅查询出当前须要显示的信息。
  • 屡次请求一样的数据。这种状况一般发生在相同事务中的不一样组件之间是彼此独立的,而每一个组件都会请求一样的数据。咱们并不清楚当前上下文中已经加载了哪些数据,最后只得屡次发出一样的查询。
  • 发出多个查询语句以得到某一数据集。一般这是因为没有充分利用到复杂的SQL语句、存储过程等在一次批处理中获取须要的数据所致使的。

延伸阅读:Blog on Linq2Sql Performance Issues on DatabaseVideo on Performance Anti-Patterns数据库

问题二:过多地使用同步编程

毫无疑问,同步对于应用中共享数据的保护来讲是相当重要的举措。但有不少开发者却过分使用同步,好比在超大段的代码中使用同步。在低负载的状况下,这么作倒没什么问题;但在高负载或是产品环境下,过分的同步会致使严重的性能与可伸缩性问题。浏览器

延伸阅读: How to identify synchronization problems under load缓存

问题三:过分使用远程调用服务器

不少库都使用了远程通讯。对于开发者来讲,远程调用与本地调用彷佛没什么区别,但若是不清楚远程调用的本质就会铸成大错,由于每一次远程调用都会涉及到延迟、序列化、网络堵塞以及内存使用等问题。若是没有通过深思熟虑而盲目使用这些远程技术就会致使严重的性能与可伸缩性问题。

延伸阅读: Performance Considerations in Distributed Applications

问题四:错误地使用对象关系映射

对象关系映射为开发者解决了不少负担,好比从数据库中加载对象以及将对象持久化到数据库中。但与其余任何框架同样,对象关系映射也有不少配置选项须要优化,只有这样才能适应于当前应用的须要。错误的配置与不正确的使用都会致使始料不及的性能问题。在使用对象关系映射框架前,请务必保证熟悉全部的配置,若是有机会,请深刻到所用框架的内核,这样使用起来才有保障。

延伸阅读:Understanding Hibernate Session CacheUnderstanding the Query CacheUnderstanding the Second Level Cache

问题五:内存泄漏

托管的运行时环境(如Java和.NET)能够经过垃圾收集器进行内存管理。但垃圾收集器没法避免内存泄漏问题。“被遗忘”的对象依旧会占据着内存,最终将会致使内存泄漏问题。当对象再也不须要时,请尽快释放掉对象引用。

延伸阅读:Understanding and finding Memory Leaks

问题六:使用有问题的第三方代码/组件

没有人会从头编写应用的所有功能。咱们都会使用第三方程序库来加快开发进程。这么作不只会加速产出,也增长了性能上的风险。虽然大多数框架都具备良好的文档而且通过了充分的测试,但没人可以保证这些框架在任什么时候候都会像预期的那样好。所以,在使用这些第三方框架时,事先必定要作好充分的调研。

延伸阅读: Top SharePoint Performance Mistakes

问题七:对稀缺资源的使用存在浪费的状况

内存、CPU、I/O以及数据库等资源属于稀缺资源。在使用这些资源时若是存在浪费的状况就会形成严重的性能与可伸缩性问题。好比说,有人会长时间打开数据库链接而不关闭。链接应该只在须要的时候才使用,使用完毕后就应该放回到链接池中。咱们常常看到有人在请求一开始就去获取链接,直到最后才释放,这么作会致使性能瓶颈。

延伸阅读: Resource Leak detection in .NET Applications

问题八:膨胀的Web前端

因为如今的Web速度愈来愈快,用户的网络体验也愈来愈好。在这个趋势下,不少应用的前端都提供了太多的内容,但这么作会致使差劲的浏览体验。不少图片都太大了,没有利用好或是错误地使用了浏览器缓存、过分地使用JavaScript/AJAX等,全部这一切都会致使浏览器的性能问题。

延伸阅读: How Better Caching would help speed up Frankfurt Airport Web SiteBest Practices on Web Performance Optimization

问题九:错误的缓存策略致使过分的垃圾收集

将对象缓存在内存中能够避免每次都向数据库发出请求,这么作能够提高性能。但若是缓存了太多的对象,或是缓存了不少不常使用的对象则会将缓存的这种优点变成劣势,由于这会致使太高的内存使用率及过多的垃圾收集活动。在实现缓存策略前,请想好哪些对象须要缓存,哪些对象不须要缓存,进而避免这类性能与可伸缩性问题。

延伸阅读:Java Memory ProblemsIdentify GC Bottlenecks in Distributed Applications

问题十:间歇性问题

间歇性问题很难发现。一般这类问题与特定的输入参数有关,或是发生在某个负载条件下。彻底的测试覆盖率及负载与性能测试能在这些问题产生前就发现他们。

相关文章
相关标签/搜索