会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 建站经验 > 性能调优攻略

性能调优攻略

时间:2012-06-21 18:30:55   作者:   来源:   点击:

三、定位性能瓶颈

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

3.1)查看操作系统负载

首先,当我们系统有问题的时候,我们不要急于去查询拜访我们代码,这个毫无意义。我们首要需要看的是操作系统的述说。看看操作系统的CPU操纵率,看看内存使用率,看看操作系统的IO,还有网络的IO,网络链接数,等等。Windows下的perfmon是一个很不错的东西,Linux下也有很多相关的命令和东西,比如:SystemTap,LatencyTOP,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的成果

四、常见的系统瓶颈

下面这些东西是我所经历过的一些问题,也许其实不全,也许其实不对,年夜家可以弥补指正,我

分享到:

网友评论

热门建站经验