Linux资源分析工具杂谈

 

       众所周知,计算机科学是客观的,也就是说对于一个给定的问题,我们总是能给出明确的答案,比如我们网上购物买了两件100元的衣服,我们应该付款200元,但是系统给我们计算出的金额确是300元,我们可以明确的告诉商家,结果算错了。与此不同,性能却常常是主观的,甚至对性能问题的判断都可能是不准确的,比如我们刚刚提到的1ms,一定有人认为是好的,也有人认为是差的,要客观的回答这个问题,可能是一项系统性的工作,必须需要首先定义基准(基准定义本身相对复杂,内容可以写一本书,在此不做深入讨论),有了基准指标,通过比较才能得出合理的结论。表1列出了一些数值,期望可以使大家对计算机科学的一些延时有一个粗略的概念,表中以一个3.3GHZ主频的CPU一次访问寄存器为基准进行说明,比如如果我们认为计算机世界中一次寄存器访问的时间0.3纳秒是现实生活中的1秒,那么访问一次内存的相对时间就是6分钟,表1中参考数据源自互联网。

 

 

Linux资源分析工具杂谈

表1. 计算机科学中的延时

 

       软件发展到今天可谓日新月异,短短的几十年中极大的提高了人类的生产力。伴随着软件功能的发展,软件的复杂度也在几何级的增长,从经济性的角度来讲,人们总是希望投入更少的硬件资源,更少的电力,更少的时间来完成更多的生产任务,人们期望自己的每一度电,每一分钟时间都在用在有意义的生产活动中。面对复杂的软件,我们如何知道软件在做有意义的事情而不是在无意义的阻塞,或者系统的哪一部分确实存在性能瓶颈,比如内存太小,硬盘太慢,CPU太慢等等。系统性能分析可以在不同的维度进行审视,常用的维度有负载分析和资源分析,本文希望从资源分析的角度对相关的工具进行讨论。

中国有句古话,工欲善其事,必先利其器,人类文明进步的最重要的标志就是可以在对的时候使用对的工具。但是问题来了,什么是对的时候使用对的工具?前人对问题总结后分成了三类,第一种是理解问题,也知道如何解决问题,第二种是理解问题,但是以个人的能力无法解决问题,第三类问题是不知道问题的存在,更不知道如何解决问题。第一种问题和第二种问题我们称之为基础问题,因为我们可以通过个人能力或者团队合作解决这类问题,第三种问题未知的未知才是我们需要重点关注的问题,理论上来说,在一个成熟的软件开发周期中,不允许存在未知的未知,我们需要对系统的各个层次都有透彻的理解和深入的把握。

       当今世界的三大主流操作系统Linux, Windows NT, Mac OS都提供了系统的工具集来监控,排查各类性能问题,比如Windows平台上Mark Russinovich的Sysinternals工具集,Windbg工具集,Linux 平台上的Sysstat工具集, Brendan Gregg力推的DTrace工具集。为了解决已知和未知的问题,我们首先需要对操作系统和硬件的相关指标有一个基础的认识,否则即使有了适合的工具,统计出了详尽的结果,我们仍然无法透彻的理解软件和系统发生了什么。如图1所示是性能分析大神Brendan Gregg对常用的性能分析工具进行的详尽总结。

 

 

Linux资源分析工具杂谈

 

图1. Linux Performance Tools

 

基础篇

 

下面我们对图1中的一些常用基础分析工具以及应用场景进行简单的分析。常用的性能分析工具包括:uptime, vmstat, mpstat, sar, ps, top, pidstat等等,这些命令的简单描述请见表2。

 

 

Linux资源分析工具杂谈

表2. 常用性能分析工具简单描述

 

       系统发生CPU性能问题时通常第一个使用的命令是uptime和top,uptime命令输出系统过去1分钟,5分钟和15分钟的平均负载,通过这三个数值可以粗略的分析出系统过去15分钟内负载是降低了,升高了,或者是持平,uptime运行结果如图2所示。

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsffjf.html