转载: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倍,但我们有时并不需要这种做法,这种事情更多是自己在优化技能上的一个学习。我们在做优化时应该多问一些问题 :你的优化让系统有什么变化:

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

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

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

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

  ......

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

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

转载于:https://www.cnblogs.com/ceshi2016/p/9052807.html

系统性能优化的常见八大误区相关推荐

  1. 网络服务器性能常见问题,服务器在使用过程中常见的误区有哪些?

    服务器是企业的必需资源,但是如何确保所购置或租赁的服务器能够持续高效.稳定地工作和运行,是企业最关心的问题之一.在日常操作中,对服务器配置不当,以及一些常见的使用误区,都有可能导致服务器没有工作在最佳 ...

  2. 八大误区,逐个击破(终篇):云难以扩展、定制性差,还会让管理员失去控制权?

    Hi!我们是Atlassian全球白金合作伙伴--龙智.我们发现不少企业对是否要迁移上云感到犹豫不决,多数情况下是因为尚未掌握正确的信息,存在很多认知上的误区.我们将Atlassian白皮书<打 ...

  3. Microbiome:微生物组研究中优化方法和规避误区

    本网对Markdown排版支持差,请跳转至 "宏基因组"公众号阅读: 微生物组研究中优化方法和规避误区 2017年五月发表在Microbiome上的综述,对于老司机会有很多共鸣,对 ...

  4. 语音输入常见六大误区 你中招几条?

    原标题:语音输入常见六大误区 你中招几条? 随着智能手机越来越"聪明",越来越多的新输入方式正在得到长足的发展,而作为最重要的人机交互,"语音"在近几年的发展尤 ...

  5. 系统性能优化策略 -- 持续优化更新

    [开篇词]      无论是传统行业还是互联网行业,一个优秀的软件产品,必须兼顾产品的质量和性能.这二者也可以反映出从业者的技术能力.思维方式以及格局!故性能优化应该是我们所有猿类共同的追求. [策略 ...

  6. 辅导1000多名学生后,我总结了学习数据分析的八大误区

    数据分析好学吗?很好学!然而很多同学学着学着就钻进误区,结果空耗力气不说,还不解决问题.今天陈老师就来盘点下,常见的八大误区.同学们有则改之,无则加勉哦. 01 目标不明,贪大求多 学数据分析到底是为 ...

  7. C-V2X八大误区澄清和发展辩思

    转载自公众号:5G行业应用 原文地址:https://mp.weixin.qq.com/s/qu8sk7By5YlUN2FlA0pp5Q 文章来源:电信科学 ,作者电信科学. C-V2X八大误区澄清和 ...

  8. 【书评】一本Android系统性能优化的新书

    Android性能优化,是一个合格的Android程序员必备的技能,现如今几乎所有的Android面试内容都会或多或少涉及性能优化方面的话题. 学习Android性能优化可以让我们在简历上展示自己的专 ...

  9. [书籍分享]0-010.教训:互联网创业必须避免的八大误区

    封面 内容简介 <教训:互联网创业必须避免的八大误区>是一个成功学泛滥的年代.成功人士往往只谈成功之道,而不提遇挫之苦.对于成功学,多数创业者趋之若鹜.其实,相较于高高在上的成功学,对于他 ...

最新文章

  1. Python3.5源码分析-sys模块及site模块导入
  2. ios 绘制线框_iOS 绘制虚线框
  3. 第二章16位和32位微处理器(1)——8086的编程结构与最小模式
  4. 使用 IntraWeb (26) - 基本控件之 TIWMenu
  5. VS2015 设置项目依赖项
  6. MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题
  7. 【解决】Linux使用vim出现E325:ATTENTION错误
  8. SolarWinds盛邀技术专业人士参加第八届年度THWACKcamp虚拟IT活动
  9. 关于近十年来N-S方程的研究结果
  10. html禁止查看图片,强看被屏蔽微信朋友圈
  11. 转载-解决word导出pdf图片变模糊的问题
  12. vue填坑之全局引入less,scss,styl文件
  13. 数据库课程设计-KTV点歌系统(VB.net 窗体,MySQL5.5)
  14. 几乎所有食物的英文翻译
  15. pythonstdin_详解Python 中sys.stdin.readline()的用法
  16. 什么叫实时操作系统,什么叫非实时操作系统,两者有什么区别?
  17. 多层循环给数组添加元素重复添加问题
  18. 纪中游记(7.11~7.22)
  19. 微信编辑器哪个操作最简单?
  20. 大数据知识梳理(Hadoop、HDFS)(整理中。。。)

热门文章

  1. Python 序列化 pickle/cPickle模块
  2. C#的变迁史 - C# 2.0篇
  3. SQL Cookbook:一、检索记录(1)从表中检索所有行和列
  4. 加强IIS安全机制 建立高安全性能Web服务器
  5. ubuntu 16.04 编译 opencv_contrib 3.4, nonfree
  6. gitlab 安装报错:Could not find modernizr-2.6.2 in any of the sources
  7. 粒子滤波 演示与opencv代码
  8. ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-中)
  9. 深度窥探 QuickTest 视图(1)
  10. selenium中webdriver跳转新页面后定位置新页面的两种方式