系统性能优化的常见八大误区

梦想空间 梦想空间     2022-11-13     265

关键词:

转载:http://www.cnblogs.com/yunman/articles/5482129.html

一、吞吐量与响应时间

  系统的吞吐量反映了一个系统的容量,可承受的负载,很多系统都以这样一个指标来衡量系统的性能。而响应时间往往更容易忽视。我认为吞吐量更多是衡量一 个系统在特定压力下的稳定性,而响应时间可以更好的形容系统性能。一个请求响应时间满足不了需求,那系统再高的吞吐量是没有意义的。比如普通的网站页面, 如果客户的一个请求都能在200ms以内响应,那是非常不错,如果能在2秒内响应,那也还行,但如果都要在20秒响应,估计没人使用。而对于局域网内的应 用,如营业厅收费操作,这种响应时间如果是2秒都会让营业员有明显的不爽。

  二、忽视系统环境差异

  我们是否经常出现线下性能测试非常好,线上性能很差问题,或者是A环境好,B环境性能差。这种情况大部份是系统环境的差异,如两个环境硬件不一样,配置参数不一样,数据规模不一样,缓存命中率不一样等等。在做性能测试时需要深入分析正式环境的各种数据细节,然后在做性能测试时有针对性的去模拟。

  三、性能测试无用论

  性能测试是一个非常复杂的工作,也是最考验人计算机功底的工作,性能测试并不仅是学习如 何使用loadrunner或jmeter之类的工具,更多是要分析用户及业务场景,估算并验证系统性能容量,找出性能瓶颈并解决。精通测试工具可以更好 的提高工作效率。之所以有些人会提出性能测试无用论,大部份因为他认为正式环境太复杂,无法有效模拟出正式环境的瓶颈。其实这也是性能测试的难点,如何在 不同的环境中模拟出性能瓶颈。如果是普通测试工程师,估计只会根据业务逻辑搭建性能测试环境,并给出测试结果。如果是高级测试工程师应该清楚系统架构、应 用逻辑、业务场景、数据分布、硬件性能等等,最后给出有意义的性能测试模拟场景和数据。

  性能测试最容易忽视的是数据分布与缓存命中率。正式环境的数据分布可以通过线上数据抽样,没有正式数据只能根据业务评估。比如工作流应用中个人平均待办工单是多少?电子商务应用中热销商品的评价记录会有多少?这些数据分布对性能测试的结果有非常大的影响。

  缓存命中率对性能测试结果的影响更恐怖,可能有10倍,甚至上万倍都不为过。常用如CPU cache对内存的缓存,内存对硬盘的数据缓存,memcached对db数据的缓存,浏览器本地对远程的缓存。我们做性能测试需要仔细分析正式的缓存命 中数据,然后模拟最差值、正常值、最好值去评测,最后分析出缓存命中率对真实性能的影响。

  四、缺少性能量化

  性能量化是指对系统功能或硬件的主要指标进行性能指标计算,比如一个查询请求的所有开销计算,包括网络开销,应用服务器开销,数据库服 务器开销等等,或者是更细化的CPU开销,内存开销,IO开销等。性能量化还包括系统所使用的硬件指标,包括CPU性能,内存容量及性能,硬盘带宽及 IOPS,网络带宽及延时等等。没有这些基础数据是很难做性能量化,否则只能做简单的表面性能测试,给出一些感性数据,准确的系统整体性能容量评估也无从 谈起。没有扎实的性能量化基础数据,搞不清楚一个逻辑在各个环节开销,那做性能优化只能是凭感觉或经验走。

  五、硬件成本

  在IT人的眼里硬件的费用是很高的,软件成本是很低的甚至可以忽略,因为硬件需要购买,基本上没有免费的硬件,而软件可以选择开源免费的,或者自己开 发,甚至使用盗版。因此在遇到性能问题是程序员首先想到的优化软件性能。但在这个人工成本上升,硬件成本下降,硬件性能或容量随摩尔定率的发展的时代,我 们也应该重视硬件的优化方法。

  如果是服务器网络瓶颈,百兆接口升级到千兆,千兆升级到多口千兆甚至是万兆,这种升级都可以快速解决性能问题。单块SATA硬盘吞吐量不够,可以选择 换SAS 15K硬盘,吞吐量就提升1倍,如果还不够可以选择多块硬盘做RAID,实现一个数量级内近线性的吞吐量提升,如果是硬盘IOPS低,可以选择换SATA 的SSD硬盘,能提升10倍以上的IOPS,如果要求更高可以选择换PCIe的SSD硬盘,可以提升100倍以上的IOPS。内存不足可以增加内存容量, 当前单根4G,8G容量的内存性价比都不错。CPU升级一般比较麻烦,因为受到CPU架构的影响,且CPU的发展较快,成本较高,所以很少做,对于老的服 务器CPU不足一般会选择直接淘汰,重新采购新的。

  通过硬件升级可以快速解决系统性能问题,对于可预估的系统容量性价很好。但顶配或者新出来的硬件贵得离谱,最新的硬件往往也会存在一些未知的BUG, 所以硬件升级一般不会选择1年内出来的全新架构的设备,而通常选择2年以上比较成熟的硬件性价比会更好。但是硬件升级往往会有上限,顶配或者最高性能的硬 件往往性价比不好,所以在硬件升级解决问题后同时需要分析业务增长导致更多硬件成本的问题。选择软件优化还是硬件优化是一种技术成本平衡决策,有时软件也 需要针对硬件做特定的优化。

 

 

六、缓存的威力

  缓存是好东西,基本上90%的系统架构优化都是在围绕着如何利用好缓存。缓存真是无处不在,硬件上看,有硬盘缓存,RAID卡缓存,存储缓存,主 存,NUMA特性,CPU L3-L2-L1等等。软件架构上看,有全局数据缓存,私有数据缓存,连接池,应用服务器缓存,WEB服务器缓存,CDN缓存,客户端文件缓存,客户端内 存缓存等等。基本上大型系统都会有很多级缓存,否则需要非常高的硬件投入才能解决问题。硬件缓存通常都比较智能,或者说99%的情况下我们不需要修改配 置,即使修改带来的性能提升一般也不会太多,除非你的软件有较明显的缺陷,你对硬件和你的软件特性已经了解得非常深入。 软件缓存架构带来性能的提高,往往也带来了负面的问题,如架构复杂化,数据同步多,数据不实时,维护成本高,系统调试复杂等问题,所以对于软件架构上任何 一个缓存架构,都需要深入分析是否有必要。我认为如果增加一层缓存架构,至少要有5倍以上的提高提升,否则就要分析成本了。  对于中小型系统,不建议有复杂的缓存架构,因为让系统能更快速发展比提供更好的性能更有意义,杂的缓存架构往往需要投入更多的人力成本。

  七、客户第一

  我不知道客户第一是谁提出来的,但这个词真不能从字面上去理解,否则就会让我们走向歪路。首先,谁是我们的客户,谁是我们的直接客户,谁是我们的最终 客户,付钱给我们的是否就是我们的客户?客户类型1与客户类型2发生了利益冲突,我们该以谁为第一。重要的客户与大部份客户利益有冲突时如何处理。这些看 似与系统性能优化无关的话题,但往往左右我们系统设计的方方面面。我们做的工作有没有为了个别客户去优化他的界面流程或性能而让大部份用户认为系统更复杂 或更难使用。

  八、过度优化

  大家都清楚性能优化的重要性,因此我们很多经历都是在做系统优化,也导致我们有时会犯过度优化的错误。有人说他性能优化提高了10倍,100 倍,1000倍,但我们有时并不需要这种做法,这种事情更多是自己在优化技能上的一个学习。我们在做优化时应该多问一些问题 :你的优化让系统有什么变化:

  你的优化有没有让系统更复杂了,以后的维护成本高了一些?

  你的优化是否对大部份业务场景有效,还是只是为了一小部份场景优化而让其它主业务变慢或变复杂了?

  你的优化对客户体验有感觉吗?

  你的优化方法可持续有效吗,还是业务逻辑稍有变化就失效了?

  ......

  我认为系统优化一定要有一个目标,而不是一味的提高性能,因为在性能优化的背后一定会带来或多或少的系统复杂度。系统性能优化在满足需求的情况下,需要开始衡量是否会让系统架构扩展性更差,或系统稳定性变差,可维护性变差等问题。

随笔有些是自己写的,有些是根据网上的东西自己整理的,文章基本都是别人的,只是为方便查看复制到那里

数据库性能优化的误区

常见的数据库系统优化中的一些观点: “系统性能出现问题进行优化,一定要深入了解数据库内部参数、等待事件、Latch、缓冲池、trace文件、查询/优化引擎等底层细节。” 这种观点往往出自数据库“高手”... 查看详情

常见的性能测试误区

...是很多性能问题是由软件自身功能缺陷引起的。如果应用系统功能不完善或者代码运行效率低下,通常会带来一些性能问题。功能测试通常要先于性能测试或者同步进行,软件功能完善可以保证性能测试 查看详情

数据库优化的常见误区

MYSQL数据库常见优化误区?分配内存越多越好,可能导致OSSwap?session级内存分配过大,导致OOM?索引越多越好,可能导致更多IO?Qcache设置过大,实际效果差?认为MyISAM的只读效率远高于InnoDB?人云亦云,不自己动手实践?过度优化,反而... 查看详情

性能优化常用工具及经验(代码片段)

...其排查思路更为复杂一些。对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用,它不仅包含了应用代码本身,还和容器(虚拟机)、操作系统、存储、网络、文件系统等紧... 查看详情

完爆90%的性能毛病,收好数据库优化八大通用绝招

...师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速 查看详情

完爆90%的性能毛病,收好数据库优化八大通用绝招

...师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速 查看详情

数据结构之八大排序算法(c语言实现)(代码片段)

...指针法快速排序非递归归并排序计数排序常见排序算法的性能总结常见排序算法的时间复杂度、空间复杂度、稳定性各类排序算法的稳定性分析稳定性的意义排序的概念及其应用排序的 查看详情

如何回答性能优化的问题?(代码片段)

...其排查思路更为复杂一些。对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用,它不仅包含了应用代码本身,还和容器(虚拟机)、操作系统、存储、网络、文件系统等紧... 查看详情

常见性能优化策略的总结good

...目录代码数据库缓存异步NoSQLJVM调优多线程与分布式度量系统(监控、报警、服务依赖管理)案例一:商家与控制区关系的刷新job案例二:POI缓存设计与实现案例三:业务运营后台相关页面的性能优化addbyzhj:我个人感觉性能优化... 查看详情

android八大模块进阶学习笔记(性能优化百大框架高级uiflutterkotlin...)

今年来,Android开发行业的就业形势愈加严峻,无论刚刚入门Android学习没有头绪的、还是开发多年想要突破薪资范畴的,都需要跳出编码和业务的局限,学会选型、扩展,提升编程思维,建立良好的职业规... 查看详情

性能测试注意事项和误区

性能测试注意事项和误区(干货)​​https://zhuanlan.zhihu.com/p/47747734​​ 踏进性能测试的路,踩遍各种性能的坑(性能问题定位分析) Java性能优化指南及唯品会的实战​​https://mp.weixin.qq.com/s/HzTN55r4yCdav6YmF_-Qww​​ 性能... 查看详情

android八大模块进阶学习(基础源码性能优化kotlinflutter小程序...)

大家都知道,今年移动开发不那么火热了,完全没有了前两年Android开发那种火热的势头,如此同时,AI热火朝天,很多言论都说Android不行了。其实不光是Android,iOS也有类似的言论。那么到底如何看待这一... 查看详情

web前端工程师的一些常见误区介绍!

...渲染都使用DOM,但是如果DOM使用得多了,会出现性能问题。现在很流行拉起 查看详情

数据库性能优化

数据库性能优化常见的数据库系统优化中的一些观点: “系统性能出现问题进行优化,一定要深入了解数据库内部参数、等待事件、Latch、缓冲池、trace文件、查询/优化引擎等底层细节。” 这种观点往往出自数据库“高... 查看详情

几个常见的网站seo误区,你注意过没?

今天,沈老师就和大家谈谈常见的网站seo优化误区有哪些?网站seo优化一:各种标签滥用做网站seo优化的站长都知道,每个网页有且只有一对h1标签,这里就有很多优化人员,就把图片放在h1标签中,认为这样做能加强图片的ALT... 查看详情

数据库性能优化主要包括哪些方面?

参考技术A包括网络、硬件、操作系统、数据库参数和应用程序。数据库的优化通常可以通过对网络、硬件、操作系统、数据库参数和应用程序的优化来进行。最常见的优化手段就是对硬件的升级。根据统计,对网络、硬件、操... 查看详情

跑步减肥常见的十大误区

...者直接转发pyq,近期更新的文章:《MySQL覆盖索引优化案例一则》《一个困扰许久的Word嵌入文档问题(求助)》《蹭热度,了解一下全面实行的股票发行注册制改革》《推荐一篇OracleRACCacheFusion的经典论文》《... 查看详情

常见的低/零代码误区

...码开发平台,让开发者可以基于平台快速搭建企业信息化系统,这种新型的开发方式,数以倍计的提高着开发者的开发效率,而且有效地减少成本,近年来越来越受到市场的关注。像国外的OutSystems、Mendix、Salesf 查看详情