性能测试19 --- Analysis 服务器硬件指标分析

关住 公 纵 号 “  阿蒙课程分享    ”  获得学习资料及趣味分享 


常见后端服务器指标

  • CPU 
  •     1.CPU 使用率(% processor Time )
  •     2.处理器队列长度
  • 带宽
  • 内存
  • 磁盘 I/O
  • 线程池
  • 缓存

现在我们看一下常见的服务器后端的性能指标,把他们的一些作用和之间的关系给理清楚,然后每一个重要的指标到底有什么意义,对于 CPU 来说,大家都是到,这是服务器很关键的一个指标,我们如果CPU 使用率让它变得很高了以后,我们服务器响应一定会变慢,我们都会有这样的感受,就是我们的电脑的 CPU 是 100%, 你会感觉到很卡,甚至鼠标移动都很慢,甚至点击某个文本框半天都没有响应,什么原因?事实上我们简单的连接操作系统的工作原理的就能够知道,对于 CPU 来说,他的资源是有限的,如果说他已经满负荷在运转了,这个时候我们无论是一定一下鼠标,点击任何按钮,都是要借用CPU 的资源来处理我们的事件,这个时候CPU 自己都忙不过来,怎么办?他就说,你稍等一会吧,你这个事件现在还忙不过来,你就先排着队,等我把手头的事处理完就来处理你的事情(点击的事件,或者是操作的事件),这个时候你感受到的就是等了一下,反应了半天,CPU 才把这个事情给处理明白,因为他忙不过来,他会让这些请求 CPU 资源的进程先排队,等我一件一件处理,卡壳就是这么一种原因,基于这样一种场景,CPU 重要的指标其实就两个,第一个 CPU 使用率,CPU 使用率到达100% 就代表忙不过来了,那并不是说 CPU 90% ,CPU 就一直是很闲着,他手上仍然有很多活要做,只不多排队的概率很低很低,因为这个操作系统的排队等待,还有系统的调度并不是完全的按照先来后到他会有优先级的顺序的,就像我们现在知道,IOS 或者安卓这两个操作系统也是一样的,他会更倾向用户处理,用户的操作优先,后台的一些事情他可能会慢慢的处理,这个就跟我们系统的体系架构,设计理念有关系了,对于 CPU 来说也是同样的道理,他也会有一些优先级,比如说用户操作的跟画面相关的跟界面相关的窗口的应用程序,这个跟用户交互的他会把优先级设置的很高,或者说是对于操作系统里面比较重要的服务优先级也比较高,有一个优先级,并不是完全的先来后到,其实这一点我们也可以通过操作系统里面的一个属性可以看到


这是一个优先级的设置,当然他不会给我们太详细的设置,因为这个涉及到太底层的东西了,咱们的 ios 手机 安卓手机都是有这样的优先级的策略的,所以 CPU 的使用率是我们可以监控到的很关键的指标,在 windows 里面监控的名称就叫 % processor Time 

   Processor  Queue Length:

            刚才我们已经说了,CPU 处理不完就会排队,所以第二个指标就是“处理器队列长度”,有可能我们的处理器使用率是 100 %,但是他没有队列长度,证明CPU 还是忙的过来的,一切都在掌控,即使CPU没有到100% 但是他的队列很长,也证明CPU 其实也到极限了,队列长度在我们的监控里面叫 Processor  Queue Length ,他的一个标准通常来说,他的队列长度 length = 2* 内核数 ,如果是双核的我们的队列长度尽量不要超过 4 个,4 个以内都很正常,如果是四核的那就不要超过 8 个,基本上就是说 1 个 CPU 处理单元他的队列尽量保持在两个以内,就是这么个意思,那么这是 CPU 的两个关键的指标,有了这两个关键的指标我们就可以清楚的知道,CPU 他现在的一个情况了,但是我们到这个指标监控里面,我们可以看CPU 的指标,他有很多,一级缓存、二级缓存、三级缓存等等很多这些指标,我们没有必要把他们所有的这些指标全部搞明白,当然有时间的话,大家可以好好的理一理,但是毕竟来说我们刚开始去学习,不可能把这些东西搞得特别透,所以我们重点关注这两个重点的指标,我给大家讲也只讲关键的部分,这里的指标这么多我们只需要关注 CPU 的利用率就行了,如果CPU 是双核的,那么第一核,第二核,或者是所有的我们都可以监控到,那么他的队列长度不在 Processor 这个类底下,在 System 这个类底下,底下有一个  Processor  Queue Length 处理器的队列长度,这两个指标可以决定CPU 的现在运行的情况

    带宽:

        带宽是(每秒接受的数据量,每秒发送的数据量),就意味我们服务器的上行和下行,对应的就是接受和发送,我接受数据量就是接收来的,到我服务器这边一个数据量,每秒大约是多少,这个跟我的带宽的下行是有关系的,所谓下行就是下载,从远程每秒钟发送出去的数据量,对应的其实就是我服务器的上行的带宽,那么我们去监控这个指标,这个指标本身没有什么可分析的,标准就是接受的低于下行带宽/8,发送的低于上行带宽/8,这个监控的话就是网卡 Network Interface 底下的 bytes received/sec  bytes send/sec  每秒钟接受的数量,每秒钟发送的数量,就是某一块具体的网卡,选择正确就好了,这个指标很好理解,不做过多讲解

    内存:

扫描二维码关注公众号,回复: 2567983 查看本文章

            对于内存来说,我们平时看任务管理器,要监控内存都是监控内存的额使用率,或者是内存的可用内存数量(通常以M为单位的),单纯有这个内存的使用率或者是可用内存数量,其实这两个是一样的无非是一个是用了多少,一个是还剩下多少,单纯的只用这一个指标跟CPU 一样只看他的使用率,或者队列长度,那么评估其实也不是特别全面的,对于内存来说,其实他还有一个重要的指标就是内存的也交换的频率,在指标的名称叫做 page/sec ,其实就是告诉你,内存跟虚拟内存的数据交换的频率高不高,这种交换的频率的标准时越低越好,比如对于一个操作系统来说,我们的也交换频率要控制在 1 万以内,大方向上来说,具体的细节,我们也给大家准备了资料,后边会给大家发下去看,大家完全可以对页交换频率进入更深入的了解,它牵涉到一个技术点,这个是需要我们去理解的,就是内存其实很关键,他对于我们后端性能的调优或者是性能的评估,很多时候都是在调整他的内存使用的参数,内存或者是缓存是同样的一个概念,是同样的东西,我们就把他放在一起吧,所谓缓存,其实就是一个应用程序使用的内存就叫缓存,分配给多少内存给这个应用程序可以使用,分配给他的就是缓存,这个缓存是内存层面的缓存,事实上我们 web 测试我们也给大家讲过,对一个浏览器来说,浏览器的选项里面,setting 有临时目录


就是我们去访问一个网站的时候,一些静态资源会放在临时目录里面,这个临时目录的话我们通常也叫做缓存,事实上严格意义上的缓存是指内存,对于向我们这种浏览器里面使用的临时目录,他不是严格意义上的缓存,但是我们就这么称呼了,也没有什么问题,他会把静态资源保存在硬盘里面,然后相对网络来说,硬盘的读取速度更快,这种也是类似缓存一样的道理,我们用内存做缓存,原因是因为,内存的处理速度比硬盘的处理速度更快,硬盘的处理速度比网络更快,所以我们是更好的利用好速度更快的硬件来加快我们的处理速度提升我们的响应时间,那么对于内存来说,重要的就是页交换的频率,页交换的频率到底指什么意思,这个需要结合着虚拟内存来看,什么是虚拟内存,我们给大家用最简单的一句话解释,利用一块硬盘区域模拟内存的操作,他不是内存,他是虚拟内存,为什么会有虚拟内存的概念,因为最开始几十年前内存很小,很贵,二硬盘便宜,同时容量大,内存比硬盘贵100倍,内存的速度比硬盘快100倍,那对于需要内存比较大的应用程序怎么办?反正硬盘容量比较大,比较便宜,我们要不就把硬盘的某块区域拿来用一用,给他设定一个虚拟内存的一个概念,这样当我内存不够用的时候,把一些暂时休眠的一些数据我们把他扔到硬盘里面,先暂时保存起来,我让那些需要用内存的应用程序有内存可以用,等我把这些应用程序关闭了,然后要去激活其他的应用程序的时候,把硬盘中的数据再读回到内存中,大家来不停的交换这个数据,操作系统是单用户的同时用户是单窗口的,同时只能操作一件事情,特别以前的黑白的,命令行的,你做这件事情的时候,我把你这件事情的数据加载到内存里面,其他的事情的数据先暂时在硬盘保存起来,如果你操作别的事情的时候,再把事情的数据从硬盘读取到内存,再把不操作的事情的数据从内存仍辉到硬盘,所以在这个过程中就叫做页交换,那页是一个什么概念,页是内存的管理单位,内存里面的数据都是以页的形式进行管理的,这个有学硬件,有学操作系统,甚至有学底层设计的时候,这些概念都不会特别陌生,这个我们了解一下这个概念就好了,页交换:内存和硬盘之间的数据交换,那么频率为什么越低越好?频率越低证明内存利用的越充分,剩余的控件还很多,不需要和硬盘进行数据的交换,如果我们页交换的频率很高,那么就有可能我们的内存不太够用了,他需要和虚拟内存做一些交换,注意虚拟内存指的就是硬盘,我们知道,硬盘本身交换速度就很慢,内存一直和一个比自己慢的部件读来读去,这个慢的部分他会拖累内存的处理速度的,所以尽量降低这个频率,我们关注这两个指标就可以了,就是内存使用率和页交换频率,在 contorller 这边看一下,在  memory 里面有一个 page/sec 添加进来就可以了,这边内存里面其实有很多其他的内存的指标,跟内存使用率相关的,跟也交换相关的,有很多很多其他的,这些指标作为扩展知识,剩下的指标大家自己学习,不用一开始所有的东西你都需要弄明白,我们希望的是,首先思路是清楚的,核心的概念理解,然后当我们再去做性能测试的真的需要某一个指标再去考察具体的意思,把我分享的一些资料,比如说内存计数器,我们把这些资料当成一个字典,我们没有必要去背字典,我们需要去用的时候去查一下这个字典,我们需要掌握的是查字典的方法,给大家理的就是一种方法,一种原理,否则你知道他在说什么,但是不知道他跟性能有什么关系,

    硬盘I/O 

            硬盘和内存有千丝万缕的联系的,内存所有的内存数据都保存在硬盘里面,但是一旦他的应用程序被运行,他的数据就会被加载到内存里面,这个我们可以做一个简单的实验,比如说我们找一个大一点的文件,我们先打开一个空的记事本,看一下他的内存占用多大,找一下notepad 的一个进程,他占用的内存大约是 876 K ,我们记住这个值,现在我们用记事本打开1.2 M文本文件,我们把它打开,我们来看看这个记事本内存在加载,在上涨,而且 CPU 的消耗也挺严重的,内存增加了,因为相当于这个文件被我们加载到内存,他这个文件虽然保存在硬盘上,但是当我们运行它,这个文件就会被加载到内存中,这个时候看到的就是这个应用程序内存的额增加,加载完成了,CPU 降下来了,内存消耗了大约 3 M ,这就是这样一个道理,所以内存和硬盘他们数据的交互他们是非常的频繁的,硬盘它本身就很慢,那么我们应该关注硬盘的那两个指标?首先是硬盘的使用率,第二个硬盘的队列长度,如果硬盘在忙着读或者是忙着写的时候,还有一些硬盘的请求会先排着队,不在赘述怎么回事,跟CPU  的使用率和队列长度是一个道理,只不过我们看看监控的是那两个指标,切到我们的物理硬盘,或者逻辑硬盘,都可以,都有这两个指标的,我们就切换到逻辑硬盘, logic Disk 比方说我们就要监控 C 盘,C盘底线就有一个 Disk Time 这就是硬盘的使用率还可以细分成读的使用率,还有一个写的使用率,我们从硬盘中读数据他的请求的处理情况,和往硬盘中写数据,他的一个使用率,这边还有一些其他的一些指标,平均的硬盘的每秒字节数,平均的硬盘的每秒写的字节数,平均的硬盘的队列的长度,Avg Disk Queue Length 又可以细分成读的队列长度(Avg Disk  Read Queue Length 、Avg Disk  Write Queue Length)  ,平均队列长度是这读写队列长度之和,Disk Time 硬盘的使用率,Avg Disk Queue Length  和硬盘的队列长度 ,队列长度尽量没有,越短越好,硬盘的使用率也是越低越好

    这是常见的后台的四个硬件指标,其实对于服务器也好,对于数据库也好,对于服务器的硬件部分的四个指标足够我们来评估硬件资源的消耗了,不需要其他的指标,这四个指标综合起来就可以很清楚的知道我们的系统对硬件的消耗到底是一个什么样的状态,那最后的话还有一个线程,线程我们就留到下一节课专门给大家讲一下



猜你喜欢

转载自blog.csdn.net/countofdane/article/details/79784820