查看linux系统的性能,一般可以通过free、iostat、vmstat、top等命令来查看
[root@kumu ~]# free
             total       used       free     shared    buffers     cached
Mem:       4112856     879144    3233712          0      60388     502008
-/+ buffers/cache:     316748    3796108
Swap:      4096564          0    4096564
[root@kumu ~]#
介绍:
第一行:内存使用
total 物理内存总数:4112856
used 已经使用的内存数: 879144
free 空闲的内存数:3233712
shared 当前已经废弃不用,总是0
buffers 即Buffer Cache内存数: 60388
cached 即Page Cache内存数: 502008

关系:total = used + free
第二行:
-/+ buffers/cache:
-buffers/cache 的内存数:316748 (等于第1行的 used – buffers – cached),实际上是应用程序所使用的内存
+buffers/cache 的内存数: 3796108 (等于第1行的 free + buffers + cached),是对应用程序来说还剩余的内存

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数
对操作系统来讲buffers/cached 都是属于被使用,所以它认为free只有3233712
第三行:
交换分区swap, 列出已使用、空闲的swap
buffer 与cache 的区别:
A buffer is something that has yet to be "written" to disk.
    A cache is something that has been "read" from the disk and stored for later use.
Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。
Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
    缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。

[root@kumu ~]# iostat -d -k 1 5 
Linux 2.6.18-194.el5PAE (kumu)  2011年12月31日
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               6.96        84.26        39.50     531689     249235
sda1              0.01         0.14         0.00        911         11
sda2              6.94        83.97        39.50     529841     249224
sda3              0.01         0.11         0.00        721          0

参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 5表示,数据显示每隔1秒刷新一次,共显示5次。
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)
-x 参数
使用-x参数我们可以获得更多统计信息
 

[root@kumu ~]# iostat -x -d -k 1 5
Linux 2.6.18-194.el5PAE (kumu)  2011年12月31日
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               2.31     6.34  3.49  3.18    79.95    38.20    35.42     0.10   15.60   1.76   1.18
sda1              0.13     0.00  0.01  0.00     0.14     0.00    26.34     0.00    5.00   4.76   0.01
sda2              2.09     6.34  3.47  3.18    79.67    38.20    35.44     0.10   15.63   1.76   1.17
sda3              0.09     0.00  0.01  0.00     0.11     0.00    38.97     0.00    4.16   3.86   0.00

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的 时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个 设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;
await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
%util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该 设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因 为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
-c 参数
iostat还可以用来获取cpu部分状态值

[root@kumu ~]# iostat -c 1 5
Linux 2.6.18-194.el5PAE (kumu)  2011年12月31日
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.32    0.02    0.68    0.52    0.00   90.46

常见用法:
iostat -d -k 1 10 #查看TPS和吞吐量信息
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
iostat -c 1 10 #查看cpu状态
参考自:http://www.orczhou.com/index.php/2010/03/iostat-detail/

vmstat是一个十分有用的Linux系统监控工具,使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息
[root@kumu ~]# vmstat 2 //每2秒输出一条结果
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 3202764  64332 511152    0    0    37    18  576  923  9  1 90  1  0
 0  0      0 3203012  64332 511156    0    0     0     0 1002 1579 10  0 89  0  0
 0  0      0 3203052  64332 511156    0    0     0     0 1012 1503  3  0 97  0  0
目前说来,对于服务器监控有用处的度量主要有:
r(运行队列)

pi(页导入)
us(用户CPU)
sy(系统CPU)
id(空闲)
(如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。)
(如果bi,bo 长期不等于0,表示内存不足)
通过VMSTAT识别CPU瓶颈
r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了
[root@kumu ~]# vmstat -a 2  //使用-a选项显示活跃和非活跃内存时,所显示的内容增加inact和active
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 3201024 413236 404180    0    0    36    18  577  932  9  1 90  0  0
 0  0      0 3201056 413240 404244    0    0     0     0 1148 1689 12  0 88  0  0
 

[root@kumu ~]# top  //top的内容很多,这里就不多介绍了,详细查看前3个参数
top - 10:30:35 up  1:10,  2 users,  load average: 0.53, 0.37, 0.28
Tasks: 132 total,   1 running, 130 sleeping,   0 stopped,   1 zombie
Cpu(s):  7.3%us,  0.6%sy,  0.0%ni, 91.3%id,  0.8%wa,  0.0%hi,  0.0%si,
Mem:   4112856k total,   878900k used,  3233956k free,    60380k buffer
Swap:  4096564k total,        0k used,  4096564k free,   501924k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                         

PID
进程id编号
USER
进程所有者的用户名
PRI
进程的优先级
SIZE
进程大小,包括它的代码、栈和数据区域,以千字节为单位
RSS
进程使用的内存总量,以千字节为单位
SHARE
进程使用的共享内存数量
STAT
进程的状态,通常R表示运行,S表示休眠
%CPU
自从最近的屏幕更新以来,这个进程使用的CPU百分比
%MEM
这个进程使用的内存百分比
TIME
自从进程启动以来,这个进程使用的CPU时间量
CPU
最近执行进程的CPU
COMMAND
正在执行的命令