vmstat是Linux下查看虚拟内存(Virtual Memory)使用状况的一个工具,简单总结了一下其使用。
虚拟内存运行原理
在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。
(本部分内容来源:飞哥也是哥)
-n 3 表示每隔3秒刷新一次,vmstat其他参数请用man vmstat查看。
Procs
进程相关信息。
r: 运行及等待中的进程数;
b: 处在非中断睡眠状态的进程数;
w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间。
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的负荷很重。
Memory
swpd: 虚拟内存使用情况,单位:KB;
free: 空闲的内存,单位KB;
buff: 被用来做为缓存的内存数,单位:KB;
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒;
so: 从内存交换到磁盘的交换页数量,单位:KB/秒;
数据库服务器都只有有限的RAM,出现内存争用现象是Oracle的常见问题。
首先察看RAM的数量,命令如下(LINUX环境):
[oracle@oracle-db02 ~]$ free
total used free shared buffers cached
Mem: 2074924 2071112 3812 0 40616 1598656
-/+ buffers/cache: 431840 1643084
Swap: 3068404 195804 2872600
当然可以使用top等其他命令来显示RAM。
当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。
解决的办法有几种:
1. 最简单的,加大RAM;
2. 改小SGA,使得对RAM需求减少;
3. 减少RAM的需求(如:减少PGA)。
IO
bi: 发送到块设备的块数,单位:块/秒;
bo: 从块设备接收到的块数,单位:块/秒;
如果bi,bo 长期不等于0,表示内存不足。
System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
CPU
CPU的使用信息,以百分比表示。
us: 用户 CPU 使用时间百分比;
sy: 系统 CPU 使用时间百分比;
id: 闲置时间的百分比;
最理想的状态是使cpu处于100%工作状态,也就是说us + sy = 100,表示CPU正在满负荷工作。但要注意的是,CPU 满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。
Sorry, the comment form is closed at this time.
No comments yet.