站长之家首页 > 经验 > 性能调优最新资讯 > 正文

性能调优攻略

2012-06-21 14:01 · 稿源:酷壳

关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充

在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈! 但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后面的定位和优化无从谈起。

一、系统性能定义

让我们先来说说如何什么是系统性能。这个定义非常关键,如果我们不清楚什么是系统性能,那么我们将无法定位之。我见过很多朋友会觉得这很容易,但是仔细一问,其实他们并没有一个比较系统的方法,所以,在这里我想告诉大家如何系统地来定位性能。 总体来说,系统性能就是两个事:

  1. Throughput ,吞吐量。也就是每秒钟可以处理的请求数,任务数。
  2. Latency, 系统延迟。也就是系统在处理一个请求或一个任务时的延迟。

一般来说,一个系统的性能受到这两个条件的约束,缺一不可。比如,我的系统可以顶得住一百万的并发,但是系统的延迟是2分钟以上,那么,这个一百万的负载毫无意义。系统延迟很短,但是吞吐量很低,同样没有意义。所以,一个好的系统的性能测试必然受到这两个条件的同时作用。 有经验的朋友一定知道,这两个东西的一些关系:

  • Throughput越大,Latency会越差。因为请求量过大,系统太繁忙,所以响应速度自然会低。
  • Latency越好,能支持的Throughput就会越高。因为Latency短说明处理速度快,于是就可以处理更多的请求。

二、系统性能测试

经过上述的说明,我们知道要测试系统的性能,需要我们收集系统的Throughput和Latency这两个值。 

  • 首先,需要定义Latency这个值,比如说,对于网站系统响应时间必需是5秒以内(对于某些实时系统可能需要定义的更短,比如5ms以内,这个更根据不同的业务来定义)
  • 其次,开发性能测试工具,一个工具用来制造高强度的Throughput,另一个工具用来测量Latency。对于第一个工具,你可以参考一下"十个免费的Web压力测试工具",关于如何测量Latency,你可以在代码中测量,但是这样会影响程序的执行,而且只能测试到程序内部的Latency,真正的Latency是整个系统都算上,包括操作系统和网络的延时,你可以使用Wireshark来抓网络包来测量。这两个工具具体怎么做,这个还请大家自己思考去了。
  • 最后,开始性能测试。你需要不断地提升测试的Throughput,然后观察系统的负载情况,如果系统顶得住,那就观察Latency的值。这样,你就可以找到系统的最大负载,并且你可以知道系统的响应延时是多少。

再多说一些,

  • 关于Latency,如果吞吐量很少,这个值估计会非常稳定,当吞吐量越来越大时,系统的Latency会出现非常剧烈的抖动,所以,我们在测量Latency的时候,我们需要注意到Latency的分布,也就是说,有百分之几的在我们允许的范围,有百分之几的超出了,有百分之几的完全不可接受。也许,平均下来的Latency达标了,但是其中仅有50%的达到了我们可接受的范围。那也没有意义。
  • 关于性能测试,我们还需要定义一个时间段。比如:在某个吞吐量上持续15分钟。因为当负载到达的时候,系统会变得不稳定,当过了一两分钟后,系统才会稳定。另外,也有可能是,你的系统在这个负载下前几分钟还表现正常,然后就不稳定了,甚至垮了。所以,需要这么一段时间。这个值,我们叫做峰值极限。
  • 性能测试还需要做Soak Test,也就是在某个吞吐量下,系统可以持续跑一周甚至更长。这个值,我们叫做系统的正常运行的负载极限。

性能测试有很多很复要的东西,比如:burst test等。 这里不能一一详述,这里只说了一些和性能调优相关的东西。总之,性能测试是一细活和累活。

三、定位性能瓶颈

有了上面的铺垫,我们就可以测试到到系统的性能了,再调优之前,我们先来说说如何找到性能的瓶颈。我见过很多朋友会觉得这很容易,但是仔细一问,其实他们并没有一个比较系统的方法。

3.1)查看操作系统负载

首先,当我们系统有问题的时候,我们不要急于去调查我们代码,这个毫无意义。我们首要需要看的是操作系统的报告。看看操作系统的CPU利用率,看看内存使用率,看看操作系统的IO,还有网络的IO,网络链接数,等等。Windows下的perfmon是一个很不错的工具,Linux下也有很多相关的命令和工具,比如:SystemTapLatencyTOP,vmstat, sar, iostat, top, tcpdump等等 。通过观察这些数据,我们就可以知道我们的软件的性能基本上出在哪里。比如:

1)先看CPU利用率,如果CPU利用率不高,但是系统的Throughput和Latency上不去了,这说明我们的程序并没有忙于计算,而是忙于别的一些事,比如IO。(另外,CPU的利用率还要看内核态的和用户态的,内核态的一上去了,整个系统的性能就下来了。而对于多核CPU来说,CPU 0 是相当关键的,如果CPU 0的负载高,那么会影响其它核的性能,因为CPU各核间是需要有调度的,这靠CPU0完成)

2)然后,我们可以看一下IO大不大,IO和CPU一般是反着来的,CPU利用率高则IO不大,IO大则CPU就小。关于IO,我们要看三个事,一个是磁盘文件IO,一个是驱动程序的IO(如:网卡),一个是内存换页率。这三个事都会影响系统性能。

3)然后,查看一下网络带宽使用情况,在Linux下,你可以使用iftop, iptraf, ntop, tcpdump这些命令来查看。或是用Wireshark来查看。

4)如果CPU不高,IO不高,内存使用不高,网络带宽使用不高。但是系统的性能上不去。这说明你的程序有问题,比如,你的程序被阻塞了。可能是因为等那个锁,可能是因为等某个资源,或者是在切换上下文。

通过了解操作系统的性能,我们才知道性能的问题,比如:带宽不够,内存不够,TCP缓冲区不够,等等,很多时候,不需要调整程序的,只需要调整一下硬件或操作系统的配置就可以了

3.2)使用Profiler测试

接下来,我们需要使用性能检测工具,也就是使用某个Profiler来差看一下我们程序的运行性能。如:Java的JProfiler/TPTP/CodePro Profiler,GNU的gprof,IBM的PurifyPlus,Intel的VTune,AMD的CodeAnalyst,还有Linux下的OProfile/perf,后面两个可以让你对你的代码优化到CPU的微指令级别,如果你关心CPU的L1/L2的缓存调优,那么你需要考虑一下使用VTune。 使用这些Profiler工具,可以让你程序中各个模块函数甚至指令的很多东西,如:运行的时间调用的次数CPU的利用率,等等。这些东西对我们来说非常有用。

我们重点观察运行时间最多,调用次数最多的那些函数和指令。这里注意一下,对于调用次数多但是时间很短的函数,你可能只需要轻微优化一下,你的性能就上去了(比如:某函数一秒种被调用100万次,你想想如果你让这个函数提高0.01毫秒的时间 ,这会给你带来多大的性能)

使用Profiler有个问题我们需要注意一下,因为Profiler会让你的程序运行的性能变低,像PurifyPlus这样的工具会在你的代码中插入很多代码,会导致你的程序运行效率变低,从而没发测试出在高吞吐量下的系统的性能,对此,一般有两个方法来定位系统瓶颈:

1)在你的代码中自己做统计,使用微秒级的计时器和函数调用计算器,每隔10秒把统计log到文件中。

2)分段注释你的代码块,让一些函数空转,做Hard Code的Mock,然后再测试一下系统的Throughput和Latency是否有质的变化,如果有,那么被注释的函数就是性能瓶颈,再在这个函数体内注释代码,直到找到最耗性能的语句。

最后再说一点,对于性能测试,不同的Throughput会出现不同的测试结果,不同的测试数据也会有不同的测试结果。所以,用于性能测试的数据非常重要,性能测试中,我们需要观测试不同Throughput的结果

  • 大家在看
  • 相关推荐
  • 动力性能与燃油经济性能完美结合的福特汽车

    随着全球市场对车辆燃油消耗和排放法规的日渐严苛,“小型化”正成为传统动力总成发展的大势所趋,如何最优化应对排放油耗和消费者对性能和动力响应的需求,是摆在每个品牌工程师面前的挑战——这也正是福特汽车新一代小排量高效发动机脱颖而出的原因所在。本着“单缸最优”和“从设计源头优化排放”原则,福特汽车新一代高效发动机家族从设计初始,便将最优燃效和保证性能作为目标——福特汽车新一代1. 0 升和1. 5 升EcoBoost发动

  • 低调时尚高性能蓝牙耳机 2020综合性能耳机品牌

    无论是买什么东西,有对比才有选择权,买蓝牙耳机也没有丝毫的不同,一般蓝牙耳机都是适配手机的,而魅族手机作为手机行业里的领先者,自然是有很多蓝牙耳机可以适配,今天就为大家来介绍几款在魅族手机上面使用体验比较好的无线蓝牙耳机。推荐一、NINEKA南卡N2 蓝牙耳机NINEKA南卡N2 蓝牙耳机可谓是目前蓝牙耳机中的明星产品,一年不到的时间,不仅销量极速攀升,累积用户好评的口碑更是高达98%以上,在各大社交软件上也经常看到?

  • 高低功率搭配,功性能优化,腾达24口PoE系列到底多优秀!

    介绍双口上联系列的这个子系列—— 24 口PoE交换机系列产品之前,小编先带大家简单回顾一下腾达的双口上联系列交换机。整个系列,产品端口形态丰富,高低功率搭配,在工程上的可选择性更强。此外,具有双上联口的设计,更适合监控场景下的使用。 接下来,咱们进入今天正题,一起来看下—— 24 口PoE系列到底多优秀! 新老异同: 简单总结: (1)高低功率搭配,适配不同使用场景,工程应用更广泛; (2)硬件拨码半傻瓜型和管理型搭配,

  • 王者荣耀体验服王者模拟战模式暂时关闭公告

    王者荣耀官方在3月13日宣布关闭王者模拟战模式作调优开发,很多玩家还不清楚怎么回事,下面就来为大家分享一下公告。

  • 游戏满帧运行!5G性能先锋vivo Z6超强性能带来全新体验

    面对5G时代的到来,vivo Z系列率先打造5G性能先锋vivo Z6,满足消费者对5G手机的需求。5000mAh大容量电池、44W超快闪充、4800万全能四摄等配置,带来了全新的体验。而作为保障手机流畅体验的核心性能,vivo Z6搭载了骁龙765G芯片和vivo Multi-Turbo 3.0多涡轮加速引擎。那么vivo Z6的性能表现如何呢?八核处理器加持,流畅体验快人一步vivo Z6搭载的是高通首款集成5G处理器——骁龙765G,不仅支持双模5G,在性能表现上同样十分出色?

  • A14性能无敌!iPhone 12细节曝光:镜头有惊喜

    据外媒报道称,今年苹果要发布的多款5G手机中,依然会有区别对待,而只有iPhone 12 Pro系列才会集成所有的新功能,所以打算换机的用户,有能力还是直接上顶配版吧。

  • 2020最强降噪耳机 高性能高颜值无线蓝牙耳机

    蓝牙耳机是人们的重要“伙伴”,蓝牙耳机丰富了人们的精神生活,对人们生活的影响的很大的。人们出行基本上已经离不开蓝牙耳机,运动可用蓝牙耳机,听音乐可用蓝牙耳机,打电话可用蓝牙耳机,蓝牙耳机的技术越来越智能化。百元到千元左右的蓝牙耳机属于中端耳机,性价比是学生选购耳机的重要参考因素。下面就给同学们推荐几款大神都在用的蓝牙耳机。1、Nank南卡A1 降噪耳机Nank南卡A1 蓝牙耳机配置实在过于霸道,除了黑科技“主动?

  • 平价蓝牙耳机哪个最好用?低价格高性能蓝牙耳机

    随着蓝牙耳机的使用频率大幅增加,很多人在送礼的时候,也会考虑把蓝牙耳机列入清单。那么适合送礼的蓝牙耳机有哪些呢?下面就给大家推荐五款性价比很高的蓝牙耳机,不用花大价钱也能有好体验。1、南卡N2 蓝牙耳机南卡N2 蓝牙耳机是最近超火的蓝牙耳机,前段时间被各大数码媒体评价为 2019 年蓝牙耳机“最具性价比首选”的称号,其网红气质和火爆销量得到了再一次的升华和肯定。归根结底,是因为南卡蓝牙耳机无论在音质、做工、续航

  • 2020蓝牙耳机哪款最好?二十款性能炸裂旗舰推荐

    不知不觉都已经2020年了,随着越来越多的手机都取消了3.5mm耳机孔,蓝牙耳机成为大家生活必备品的趋势已经越来越明显,因此市场上也诞生了不少的蓝牙耳机品牌,那么这么多蓝牙耳机中哪款最好?今天给大家推荐2020年二十款以性能著称的蓝牙耳机。1.JEET Air Plus 蓝牙耳机用户好评率:99%首款要推荐的必须是这款顶级旗舰机皇--JEET Air Plus蓝牙耳机,作为一款轰动程度媲美Airpods2的年度爆品,JEET Air Plus蓝牙耳机主打极致的性价?

  • 探岳车灯高亮度秒杀同级 品质高性能更好!

    在SUV细分市场,卖的风生水起的热销车型,非探岳莫属。探岳在 2019 年里,取得了销售 167749 台的好车好成绩,这个亮眼的成绩,也让同级车型为之惊叹。惊艳的销售数据是探岳产品优秀的最好的佐证,亮度十足的车灯,更是为探岳锦上添花。外观非常吸引人很多人说这款车拥有唯美清新的气质,舒适的设计做工不失时尚感,并且还带着艺术的气息。外观设计来看,探岳使用了一汽-大众家族化的设计语言,前格栅使用了大量镀铬的设计,显得非

  • 性能蓝牙耳机推荐 送礼必备五款蓝牙耳机品牌

    现在蓝牙耳机的品牌特别多,因此很多想购买的新手用户往往不知道该如何挑选。蓝牙耳机并不是越贵越好,很多高端耳机都是品牌效应。那么什么蓝牙耳机好呢?今天就给大家推荐几款综合性能不错的几大蓝牙耳机品牌。第一款:南卡N2 蓝牙耳机近年来崛起的南卡蓝牙耳机是新一代网红耳机,多次打破我们常理认识的性价比,以平价轻奢的蓝牙耳机俘获数码达人、运动达人、网红、大学生的心,取得傲人的成绩。南卡N2 蓝牙耳机自推出以来,口碑?

  • 平价蓝牙耳机怎么选?实惠且高性能蓝牙耳机推荐

    不少初次尝试蓝牙耳机的人都会很纠结,因为蓝牙耳机的品类太繁多,压根都看不过来。现在蓝牙耳机的用途很广,不单单只是原来的车载方面接电话,像日常听歌、旅游、运动健身等等,大家可以根据自己的用途来挑选。今天小编为大家分享几款性价比一流的蓝牙耳机。推荐一、NINEKA南卡蓝牙耳机NINEKA南卡蓝牙耳机,近两年真的是超级火爆,是目前运动蓝牙耳机销量最火爆的品牌之一。这款耳机最大的亮点就是性价比,在海内外创下了不少销量

  • 无线蓝牙耳机什么牌子好?2020高性能蓝牙耳机推荐

    买蓝牙耳机总是要参考一些用户口碑,品牌专业度以及品牌知名度等等。今天就为大家呈现最新蓝牙耳机排名情况,给大家列举目前世界五大最新高性价比蓝牙耳机品牌。推荐一:NineKa南卡蓝牙耳机Nank南卡蓝牙耳机是最近最火的蓝牙运动耳机,虽然价格便宜,在质量方面严格把控,把每个看不到的细节都要做好,用品质和体验赢得用户的信任!从选材用料开始,走访几百家供应商,选择的都是进口级的材料,而且还有多达 80 余项高强度品质检测?

  • 苹果手机专用耳机:性能强悍的五大蓝牙耳机

    现代科技发展极快,一眨眼苹果已经出到11了,3.5mm的耳机孔依旧是取消的,这使更多人愿意配置一款蓝牙耳机,那么很多苹果用户会选择AirPods,AirPods虽好,但价格稍微有点偏贵。除了AirPods苹果手机还有哪些可以选择呢?今天小编就来给大家分享五款性能超强的蓝牙耳机。1.JEET Air Plus 蓝牙耳机 性能级别:★★★★★JEET Air Plus蓝牙耳机自推出以后,受到了用户和专业媒体的一致认可,强势入围专业媒体评选的“年度十大旗舰蓝牙?

  • 微软Xbox Series S细节曝光:性能不输上代、售价2080元

    之前曾有消息称,微软在新一代Xbox上将采取双发策略,具体来说就是,会推出一款更便宜的版本,从而争取到更多的用户,那最便宜的新Xbox是什么样子的呢?

  • NEX 3S旗舰新品搭载骁龙865,性能全面升级

    继NEX 3S旗舰新品官宣无界瀑布屏之后,今日NEX智慧旗舰微博再度放出预热视频,正式宣布NEX 3S将搭载高通骁龙最新旗舰级处理器865+X55 移动平台,并且支持双模5G网络。这意味着NEX 3S除了拥有更广阔视野的瀑布屏外,还在性能和5G网络上得到了全面进化,将给用户带来更出众的性能和极速5G体验。作为全新一代的旗舰级芯片,高通骁龙 865 移动平台采用7nm制程工艺,以及最新的A77 架构。其拥有新一代Kryo 585 CPU,大核主频高达2.84GHz

  • realme 6即将亮相海外 内置Helio G90性能表现如何?

    此前realme曾发布全新旗舰realme X50 Pro 5G,不过realme并没有停下脚步。据悉,入门产品realme 6系列即将在近期亮相海外市场,海外用户也可以通过此产品享受更良好的体验。

  • 真无线降噪耳机哪个最好用?高性能五款蓝牙耳机推荐

    细数当下的数码产品,出了手机以外,最受关注的无疑应该是蓝牙耳机了。不仅仅是普通大众喜欢使用蓝牙耳机,网红、大明星同样也是蓝牙耳机的忠实粉丝。那网红、明星都喜欢用什么蓝牙耳机呢?我们下面就来盘点几款备受网红、明星热爱的蓝牙耳机。1、Nank南卡A1 降噪耳机Nank南卡A1 降噪耳机一上市,凭借显著的“降噪”功能被人称为“主动降噪机皇”。除了显著的主动降噪能力外,其配置相对厉害,相对于普通无线蓝牙耳机喇叭只有6-8mm?

  • 南卡A1真无线降噪蓝牙耳机空降,震撼的性能登场!

    带主动降噪功能的蓝牙耳机其实几年前就出现了,但应用到真无线蓝牙耳机上倒是最近这一两年的事,尤其是连苹果也来参一脚地推出AirPods Pro,主动降噪功能就越来越引起消费者的重视。对那些每天上下班都要花上一些时间坐公交乘地跌的人来说,这项功能就真的太刚需太实用了。如何做好降噪效果,如何兼顾音质表现,这里就大有文章了。Nank南卡A1 作为一款主打性价比的真无线降噪蓝牙耳机, 699 元的售价,显然比很多牌子的真无线降噪?

  • BlueHost 美国站群服务器优点及简单性能评测记录

    目前市场上我们可选的普通VPS云主机商家相对比较丰富一些,但是对于独立服务器和站群服务器商家并不多,毕竟对于独立服务器的门槛还是需要体现商家的实力的,一般个人用户是没有实力承担服务器的成本。当然,对于我们有需要站群、多IP业务的用户可选择商家目前并不是太多。我们可能常见的包括BlueHost、HostEase、RakSmart等商家。依托BlueHost 强大的背景和技术实力,商家有新增美国站群服务器项目,服务器机房位于美国犹他州机房

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议