分类: LINUX
2011-04-19 20:20:05
首先,什么是virtual memory?简单的说,支持应用程序使用比实际内存更大的内存空间,这是通过将硬盘上一个特定的分区(swap分区)或者一个特定的文件作为内存的扩展来做到的。当实际内存不够用时,linux根据某种策略,将内存中的部分空间写到交换分区以便留出应用程序运行所需要的内存空间(参考:[url=]Understanding Virtual Memory[/url] ,[url=]What is Vitual Memory[/url])。但是,一旦开始使用交换空间,磁盘活动自然就多起来,cpu利用率就降低下来(因为磁盘的速度比内存和cpu慢多了)。这就是为什么vmstat会同时显示磁盘和cpu活动情况的原因。
vmstat输出的各个字段的含义可以参考man vmstat的解释,下面就我的理解说一下vmstat常用的几种使用方式。
1 观察磁盘活动情况磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需要进行性能调整了。
2 观察cpu活动情况vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy:系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。
vmstat:报告关于内核进程,虚拟内存,磁盘,cpu的的活动状态的工具
Linux下vmstat输出释疑:
procs(linux) / kthr(sol)
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
=====================================================================
VMSTAT介绍
通过STATSPACK收集服务器信息,主要通过收集VMSTAT的信息来展现服务器状况。VMSTAT工具是最常见的UNIX监视工具,能展现给定时间间隔的服务器的状态值。
一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。如:
[oracle@brucelau oracle]$ vmstat 1 2
procs memory swap io system CPU
r b w swpd free buff cache si so bi bo in cs us sy id
1 0 0 0 271844 186052 255852 0 0 2 6 102 10 0 0 100
0 0 0 0 271844 186052 255852 0 0 0 0 104 11 0 0 100
(注:目前系统几乎空闲,并且不同操作系统VMSTAT输出内容有所不同)
目前说来,对于服务器监视有用处的度量主要有:
r(运行队列)
pi(页导入)
us(用户CPU)
sy(系统CPU)
id(空闲)
通过VMSTAT识别CPU瓶颈
r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了。
获得CPU个数的命令(LINUX环境):
cat /proc/cpuinfo|grep processor|wc ?l
当r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:
1. 最简单的就是增加CPU个数
2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
3. 调整已有任务的优先级
通过VMSTAT识别CPU满负荷
首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。
通过VMSTAT识别RAM瓶颈
数据库服务器都只有有限的RAM,出现内存争用现象是Oracle的常见问题。
首先察看RAM的数量,命令如下(LINUX环境):
[root@brucelau root]#free
total used free shared buffers cached
Mem: 1027348 873312 154036 185736 187496 293964
-/+ buffers/cache: 391852 635496
Swap: 2096440 0 2096440
当然能使用top等其他命令来显示RAM。
当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,能将RAM段移到SWAP DISK的特别磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了,页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。
解决的办法有几种:
1. 最简单的,加大RAM
2. 改小SGA,使得对RAM需求减少
3. 减少RAM的需求(如:减少PGA)
我们基本的了解了VMSTAT工作,下面是STATSPACK通过vmstat统计收集服务器性能数据。
=============================solaris=====================
========================================================
Virtual Memory Statistics ( vmstat ) vmstat 是报告关于进程,虚拟内存,磁盘,CPU活动的一个统计报告.
在一个多CPU系统中,vmstat统计所有个数的CPU的平均输出.为每个进程进行统计.没有参数时,vmstat显示每一行是自从系统启动以后的虚拟内存的活动情况.(注:vmstat输出的第一行对于实施统计没有意义)
用法:
基本的用法是vmstat
option: 指定我们所需要的输出选项比如: paging -p , cache -c ,.interrupt -i 等等(还有一个比较有用的是S),更加具体的vmstat的参数情况可以参照man手册和系统管理员手册的相应说明.
如果没有指定参数,输出的信息是关于process , memory , paging , disk ,interrupts & cpu的显示.
interval 是在两个输出结果输出的时候给予的间隔时间.. vmstat 4 是给予4秒的间隔.
count 是你需要的输出的数据量.ivmstat 4 5 是间隔4秒输出5次数据.
下面是关于一些参数的描述:
procs
r in run queue
b blocked for resources I/O, paging etc.
w swapped
memory (in Kbytes)
swap - amount of swap space currently available
free - size of the free list
page ( in units per second).
re page reclaims - see -S option for how this field is modified.
mf minor faults - see -S option for how this field is modified.
pi kilobytes paged in
po kilobytes paged out
fr kilobytes freed
de anticipated short-term memory shortfall (Kbytes)
sr pages scanned by clock algorithm
disk ( operations per second )
There are slots for up to four disks, labeled with a single letter and number.
The letter indicates the type of disk (s = SCSI, i = IPI, etc) . The number is
the logical unit number.
faults
in (non clock) device interrupts
sy system calls
cs CPU context switches
cpu - breakdown of percentage usage of CPU time. On multiprocessors this is an average across all processors.
us user time
sy system time
id idle time
CPU问题现象:
1.) 如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.
2.) 如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.
3.) 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.
解决办法:
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些SQL语句不合理等等都会造成这样的现象.
内存问题现象:
内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.
解决办法:
1.调节applications & servers使得对内存和cache的使用更加有效.
2.增加系统的内存.
3. Implement priority paging in s in pre solaris 8 versions by adding line "set priority paging=1" in
/etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.
关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用.
========================================================================
显示虚拟内存统计信息(vmstat)
使用 vmstat 命令可以报告虚拟内存统计信息,以及有关系统事件(例如 CPU 负载、分页、上下文切换数、设备中断和系统调用)的信息。
vmstat 命令还可以显示有关交换、高速缓存刷新和中断的统计信息。
下表描述了 vmstat 命令输出中的字段的含义.
procs 报告以下内容:
r 分发队列中的内核线程数
b 正在等待资源的阻塞内核线程数
w 正在等待处理中的资源完成的换出 LWP 数
memory 报告实际内存和虚拟内存的使用情况:
swap 可用交换空间
free 可用列表的大小
page 以秒为单位报告页面错误和分页活动:
re 回收的页面
mf 次要错误和主要错误
pi 页入的千字节数
po 页出的千字节数
fr 释放的千字节数
de 最近换入的进程所需的预计内存
sr 由 page 守护程序扫描的当前未使用的页数。如果 sr 不等于零,则 page 守护程序一直在运行。
disk 报告每秒的磁盘操作数,最多显示四个磁盘中的数据
faults 报告每秒的陷阱/中断速率:
in 每秒的中断次数
sy 每秒的系统调用数
cs CPU 上下文切换速率
cpu 报告 CPU 使用时间:
us 用户时间
sy 系统时间
id 空闲时间
显示虚拟内存统计信息 (vmstat)
使用 vmstat 命令以秒为时间间隔单位收集虚拟内存统计信息。
$ vmstat n
其中,n 是两次报告之间的间隔秒数。
显示系统事件信息 (vmstat -s )
运行 vmstat -s 命令,以显示自上次引导系统以来发生的系统事件数。
$ vmstat -s
显示交换统计信息 (vmstat -S)
运行 vmstat -S,以显示交换统计信息。
$ vmstat -S
以下列表介绍了交换统计信息字段。
si 每秒换入的平均 LWP 数
so 换出的完整进程数
注: vmstat 命令会截断 si 和 so 字段的输出.
显示每台设备的中断次数 (vmstat -i)
运行 vmstat -i 命令,以显示每台设备的中断次数。
$ vmstat -i
==============================================================
procs
r-->在运行队列中等待的进程数
b-->在等待io的进程数
w-->可以进入运行队列但被替换的进程
memoy
swap-->现时可用的交换内存(k表示)
free-->空闲的内存(k表示)
pages
re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面
disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号
fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换
cpu 表示cpu的使用状态
cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间
如果fr经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
=============================================================
Solaris 2009-01-08 17:14:31 阅读146 评论0 字号:大中小
# vmstat
procs memory page disk faults cpu
r b w avm fre flt re pi po fr sr ad0 in sy cs us sy id
0 2 1 270512 20316 30 0 0 0 26 5 1223 1589 98 593 1 1 99
最好使用vmstat t [n]命令,例如 vmstat 5 5,表示在T(5)秒时间内进行N(5)次采样。如果只使用vmstat,无法反映真正的系统情况。
procs:
r-->在运行的进程数
b-->在等待io的进程数(等待i/o,paging等等)
w-->可以进入运行队列但被替换的进程
memoy(以k为单位,包括虚拟内核和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为active)
avm-->活动的虚拟内存
free-->空闲的内存
pages(统计错误页和活动页,每5秒平均一下,以秒为单位给出数值)
flt-->错误页总数
re-->回收的页面
pi-->进入页面数
po-->出页面数
fr-->空余的页面数
sr-->每秒通过时钟算法扫描的页面
disk 显示每秒的磁盘操作(磁盘名字的前两个字母加数字,默认只显示两个磁盘,如果有多的,可以加-n来增加数字或在命令行下把磁盘名都填上。)
fault 显示每秒的中断数
in-->设备中断
sy-->系统中断
cy-->cpu交换
cpu 表示cpu的使用状态
cs-->用户进程使用的时间
sy-->系统进程使用的时间
id-->cpu空闲的时间
解释:
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
io高,cpu负载这么小,估计是磁盘问题,检查cache是否打开,如果做了raid是否盘坏。
==================================================================
vmstat命令详解
Virtual Memory Statistics ( vmstat )
vmstat 是报告关于进程,虚拟内存,磁盘,CPU活动的一个统计报告.在一个多CPU系统中,vmstat统计所有个数的CPU的平均输出.为每个进程进行统计.没有参数时,vmstat显示每一行是自从系统
启动以后的虚拟内存的活动情况.(注:vmstat输出的第一行对于实际统计没有意义)
用法:
基本的用法是vmstat
option: paging -p , cache -c ,interrupt -i 等等(还有一个比较有用的是S).默认输出的信息是关于process, memory, paging, disk,interrupts&cpu的显示.
interval 是在两个输出结果输出的时候给予的间隔时间.. vmstat 4 是给予4秒的间隔.
count 是你需要的输出的数据量.ivmstat 4 5 是间隔4秒输出5次数据.
下面是关于一些参数的描述:
procs(processes)
r in run queue(表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。)
b blocked for resources I/O, paging etc.(表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。)
w swapped(表示可以进入运行队列但被交换出来的进程)
memory(in Kbytes)
swap – amount of swap space currently available(当前可用内存交换区容量)
free – size of the free list(当前的空闲页面列表中内存数量)
page( in units per second).
re page reclaims – see -S option for how this field is modified.(表示回收的页面数)
mf minor faults – see -S option for how this field is modified.(表示小级别错误计数)
pi kilobytes paged in(表示进入页面数)
po kilobytes paged out(表示出页面数)
fr kilobytes freed(表示空余的页面数)
de anticipated short-term memory shortfall (Kbytes)(列表示提前读入的页面中的未命中)
sr pages scanned by clock algorithm(表示通过时钟算法扫描的页面计数)
disk( operations per second )
There are slots for up to four disks, labeled with a single letter and number.
The letter indicates the type of disk (s = SCSI, i = IPI, etc) . The number is the logical unit number.
faults 中断信息
in (non clock) device interrupts(表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。)
sy system calls
cs CPU context switches
cpu(breakdown of percentage usage of CPU time. On multiprocessors this is an average across all processors.)(所有处理器的平均处理信息)
us user time(显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,如果大于50%,需要考虑优化用户的程序。)
sy system time(显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于80%说明可在CPU不足。)
id idle time
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(
主要是块操作)。
CPU问题现象:
1.) 如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.
2.) 如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.
3.) 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.
解决办法:
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU.
关于CPU的使用情况还可以结合mpstat, ps aux, top,prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.
一般情况下,应用程序的问题会比较大一些.比如一些 SQL语句不合理等等都会造成这样的现象.
内存问题现象:
内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po
这两栏表示每秒页面的调入的页数和每秒调出的页数. 如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.
解决办法:
1.调节applications & servers使得对内存和cache的使用更加有效.
2.增加系统的内存.
3.Implement priority paging in s in pre solaris 8 versions by adding line “set priority paging=1″ in /etc/system. Remove this line if upgrading from Solaris 7 to 8 &
retaining old /etc/system file.
关于内存的使用情况还可以结ps aux,top,prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.
一般情况下,如果内存的占用率比较高,但CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后
台的程序,释放内存的占用.
proc是系统中运行的进程的统计。
cpu是系统CPU使用量的统计。
memory是内存使用量的统计
page是页交换的统计。
faults是中断的统计。
IO是块设备上读入和写出的IO统计。
disk是磁盘IO的统计。
solairs下iostat释疑 iostat -xtc 5 2