1. 基本概念

上下文切换(Context Switches):如果可运行的线程数大于CPU的数量,那么OS最终会强行换出正在执行的线程,从而使其他线程能够使用CPU,它会保存当前运行线程的执行上下文,并重建新调入线程的执行上下文。

运行队列(Run Queue ):每个CPU 都维护一个线程的运行队列。如果CPU 子系统处于高负荷下,那就意味着内核调度将无法及时响应系统请求.导致结果,可运行状态进程拥塞在运行队列里.当运行队列越来越巨大,进程线程将花费更多的时间获取被执行.每个处理器应该运行队列不超过1-3个线程.例子,一个双核处理器应该运行队列不要超过6 个线程。 

load :就是指在CPU 队列中有多少数目的线程,以及其中当前有多少进程线程数目被执行的组合. 安全的load:一般是cpu的个数 

CPU 利用率(CPU Utilization) :CPU 使用的百分比User TimeSystem TimeWait IOIdle。如果一个CPU 被充分使用,利用率分类之间均衡的比例应该是:65% -70% User Time;30% -35% System Time; 0% -5% Idle Time 

中断(Interrupts) --Devices tell the kernel that they are done processing。例子,当一块网卡设备递送网络数据包或者一块硬件提供了一次IO 请求. 

2. CPU监测

• 查看cpu信息: cat /proc/cpuinfo

获取cpu个数: grep 'processor' /proc/cpuinfo | wc -l

 

uptime
显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。    

 

相关命令:w 显示目前登入系统的用户
 

•vmstat(virtual memory *statistics) :*实时的性能监测工具  
 

  r 表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

  b 表示阻塞的进程

  swpd 虚拟内存已使用的大小

  free   空闲的物理内存的大小

  buff   Linux/Unix系统是用来存储

  cache cache直接用来记忆我们打开的文件,给文件做缓冲

  si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。

  so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

  bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte

  bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

  in 每秒CPU的中断次数,包括时间中断

  cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

  us 用户CPU时间

  sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

  id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

  wt 等待IO CPU时间

 •TOP:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

 

  统计信息区:前五行是系统整体的统计信息。

  第一行是任务队列信息,同 uptime 命令的执行结果。

  第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。

  第四、五行为内存信息。

•mpstat(Multiprocessor Statistics):不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息

 

 

•sar: 能够查看历史数据,也可查看实时

  sar -q 查看load状况

 

  sar -u 查看cpu使用率 
  

  查看历史某一天的,这个很重要可以和以往进行对比

  sar -u -f /var/log/sa/sa03