mpstat及sar补遗

  Sysstat是一个工具集,包括sar、pidstat、iostat、mpstat、sadf、sadc。其中sar是其中最强大,也是最能符合我们测试要求的工具
安装步骤
可以到http://pagesperso-orange.fr/sebastien.godard/download.html去下载



1 安装
   tar zxvf  xxx.tar.gz

  ./configure

   make

   make install


2 先来说mpstat
  mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。下面只介绍 mpstat与CPU相关的参数,mpstat的语法如下:mpstat [-P {|ALL}] [internal [count]]

参数的含义如下:

参数 解释

-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值


比如mpstat -P ALL 1


internal 相邻的两次采样的间隔时间

count 采样的次数,count只能和delay一起使用

当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。与CPU有关的输出的含义如下:

参数 解释 从/proc/stat获得数据

CPU 处理器ID

user 在internal时间段里,用户态的CPU时间(%) ,不包含 nice值为负 进程 usr/total*100

nice 在internal时间段里,nice值为负进程的CPU时间(%) nice/total*100

system 在internal时间段里,核心时间(%) system/total*100

iowait 在internal时间段里,硬盘IO等待时间(%) iowait/total*100

irq 在internal时间段里,软中断时间(%) irq/total*100

soft 在internal时间段里,软中断时间(%) softirq/total*100

idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%) idle/total*100

intr/s 在internal时间段里,每秒CPU接收的中断的次数 intr/total*100

CPU总的工作时间=total_cur=user+system+nice+idle+iowait+irq+softirq


顺便说下
cat /proc/stat

“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。

“btime”给出了从系统启动到现在为止的时间,单位为秒。

“processes (total_forks) 自系统启动以来所创建的任务的个数目。

“procs_running”:当前运行队列的任务的数目。

“procs_blocked”:当前被阻塞的任务的数目。

3 sar采样
  SAR采样之前在http://jackyrong.iteye.com/blog/238663
有说到,这里补遗下:
sar [options] [-A] [-o file] t [n]

在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有
的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式
存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令
的选项很多,下面只列出常用选项:

-A:所有报告的总和。
-u:CPU利用率
-v:进程、I节点、文件和锁表状态。
-d:硬盘使用报告。
-r:内存和交换空间的使用统计。
-g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-q:报告队列长度和系统平均负载
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
-x { pid | SELF | ALL }:报告指定进程ID的统计信息,SELF关键字是sar进程本身的统计,ALL关键字是所有系统进程的统计。

用sar进行CPU利用率的分析#sar -u 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/200907:40:17 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle

%user:CPU处在用户模式下的时间百分比。        %nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。        %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。        在所有的显示中,我们应主要注意%iowait和%idle,%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如 果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低, 表明系统中最需要解决的资源是CPU。用sar进行运行进程队列长度分析:#sar -q 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/200907:58:14 PM   runq-sz plist-sz   ldavg-1   ldavg-5 ldavg-15
    0.49runq-sz 准备运行的进程运行队列。
plist-sz 进程队列里的进程和线程的数量


4 注意不要迷信!
(转自http://developers.sun.com.cn/blog/yutoujava/entry/14)
T2000服务器上的性能测试,对于同一个系统,我们经常会发现,有时候用mpstat或vmstat观察出来很奇怪的结果,就是在CPU利用率比较低的时候,性能反而要好,而CPU利用得很充分的时候,响应时间反而很不好。按理说,CPU越忙就说明执行的指令越多,干活越多呀,为什么会慢呢?

T2000的服务器是单CPU的,但是这个CPU有8个核,每个核有4个硬件线程,在Solaris的操作系统下显示有32个虚拟CPU。实际上每个核有一个独立的执行单元(或叫Pipeline),因此,一般来说可以把T2000等同8CPU的机器。而每个核有4个硬件线程,主要是为每个核来准备可执行的指令集。硬件线程的利用率和核的利用率是两个不同的概念。而mpstat和vmstat主要用于单硬件线程的环境下,在多线程的CPU中,显示的结果有偏差。

通常来说,如果一个CPU不是idle状态,mpstat或vmstat就会认为这个CPU当前是busy。CPU在执行指令的时候,会遇上一些情况停止下来,不再执行任何指令。但是在非多线程的CPU中,如果当前的CPU因为一些原因无法执行其他的指令,也会被当做busy。这种情况经常出现,例如一些大指令(load),会跨好几个指令周期,在这段周期内,CPU暂时无法执行其他的指令,所以也算busy。但是在多线程的CPU下,当CPU在任何停顿的时间内,都可以切换到执行其他线程中的指令,因此,传统的mpstat或vmstat无法真实的反映这种情况。

那为什么mpstat或vmstat反映使用率较低,但系统的性能较好呢。这是因为,对于一个核中的4个线程,虽然每个线程的CPU占用率不高(例如各25%),但是这个核的执行单元却充分的得到了利用。

而有的时候,每个线程的CPU占用率都很高,CPU(核)也不一定在干活。例如这个核的每个线程都在执行load指令,在这些时候,四个线程的CPU都是100%的busy,但是CPU在一段周期内什么也没有执行。

在多线程的CPU环境下,需要其他的操作系统的命令才能真正观察到CPU的利用情况,例如cpustat:

cpustat -n -c pic0=L2_dmiss_ld,pic1=Instr_cnt -c pic0=L2_dmiss_ld,pic1=Instr_cnt,nouser,sys 1

或者到http://cooltools.sunsource.net/corestat/下载corestat工具包。

你可能感兴趣的:(多线程,linux,活动,单元测试,Solaris)