Chinaunix首页 | 论坛 | 博客
  • 博客访问: 557310
  • 博文数量: 78
  • 博客积分: 2043
  • 博客等级: 大尉
  • 技术积分: 733
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-26 11:52
文章分类

全部博文(78)

文章存档

2011年(5)

2009年(64)

2008年(9)

分类: LINUX

2009-06-25 14:45:26

一、vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 195804 3812 40616 1598656 0 0 0 0 1024 66976 0 0 100 0
0 0 195804 3812 40616 1598656 0 0 0 12 1048 66961 0 0 100 0
0 0 195804 3812 40616 1598656 0 0 0 28 1054 67067 0 0 100 0
0 0 195804 3812 40616 1598656 0 0 0 0 1020 66988 0 0 100 0

(注:目前系统几乎空闲,并且不同操作系统VMSTAT输出内容有所不同)

r(运行队列):
展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了

获得CPU个数的命令(Linux环境):
cat /proc/cpuinfo|grep processor|wc -l

当r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:
1. 最简单的就是增加CPU个数
2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
3. 调整已有任务的优先级
(如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。) 

通过VMSTAT识别CPU满负荷
首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU 满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。

procs: 
r-->在运行队列中等待的进程数 
b-->在等待io的进程数 
w-->可以进入运行队列但被替换的进程 
memoy 
swap-->现时可用的交换内存(k表示) 
free-->空闲的内存(k表示) 
cpu 表示cpu的使用状态 
cs--》用户进程使用的时间 
sy--》系统进程使用的时间 
id--》cpu空闲的时间 

如果pi,po 长期不等于0,表示内存不足。 
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

2、iostat

在命令行收集有关CPU、磁盘、终端和磁带输入/输出操作的数据
#iostat -x 60 10 在60秒内产生10个统计报告,输出

  1. # iostat -x
  2.                   extended device statistics
  3. device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b
  4. fd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  5. md20         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  6. md21         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  7. md22         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  8. md25         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  9. md50         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  10. md51         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  11. sd0         17.0    1.9  185.9    3.5  0.0  0.3   18.5   0  12
  12. sd1          0.4    0.2    0.2    0.2  0.0  0.0    2.7   0   0
  13. sd6          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
  14. nfs1         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
复制代码
device显示设备名  
r/s显示每秒读磁盘操作的次数
w/s 显示每秒写磁盘操作的次数 
kr/s 显示每秒读数据总量  单位K  
kw/s 显示每秒写数据总量  单位K 
wait 显示平均的等待事务数量 
actv  显示正在处理的平均事务总量 
svc_t 显示凭据服务周期 单位 ms 
%w 显示等待时间的百分数
%b 显示磁盘工作时间的百分数


三、free

Linux下查看内存我们一般用command free
[root@nonamelinux ~]# free
total used free shared buffers cached
Mem: 386024 377116 8908 0 21280 155468
-/+ buffers/cache: 200368 185656
Swap: 393552 0 393552
下面是对这些数值的解释:
第二行(mem):
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:
第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。
这 两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
如上例:
185656=8908+21280+155468
接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换.
如何看额定值(RHEL4.0):
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数: 
1.减少缓冲与页面cache的大小,
2.将系统V类型的内存页面交换出去, 
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用swap是不是影响到系统性能的。

下面是buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。
#free
#man X
#free
#man X
#free
你可以先后比较一下free后显示buffers的大小。
另一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。 

因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)   
使用free命令   
将used的值减去   buffer和cache的值就是你当前真实内存使用

四、mpstat


五、uptime

ptime是Linux系统常用的命令,用来报告系统已经运行多长时间,依此显示的信息:现在时间,系统已经运行了的时间,目前有多少登陆用户, 1分钟系统平均负载,5分钟系统平均负载,15分钟系统平均负载。该命令从/proc/loadavg 中获得load average的信息。

范例1:系统只用一个CPU

[root@localhost ~]# uptime

12:20:49 up 3 days,9:20, 5 users, load average 1.10 1.32 1.15

对于一个CPU的系统来说,范例1中的平均负载高了些。通常来说:如果系统有n个CPU而且平均负载小于n,则说明某些CPU还有空闲的时间片。通过该命令,你能知道CPU是否繁忙,但是无法知道为什么忙。


阅读(2487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~