vmstat-监控系统性能情况

 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。

      它能够对系统的整体情况进行统计,无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。

 

    (1)用法

    用法:  vmstat  [选项参数]

       或   vmstat  [选项参数]   [数字]   [数字]

 

    (2)功能:

    功能:  报告虚拟内存的统计信息,关于进程、内存、I/O等系统整体运行状态。

 

    (3)选项参数:

      1) -d:        显示磁盘相关统计信息。

      2) -a:          显示活跃和非活跃内存

      3) -f:         显示从系统启动至今的fork数量。

      4) -p:          显示指定磁盘分区统计信息

      5) -s:          显示内存相关统计信息及多种系统活动数量。

      6) -m:        显示slabinfo

 

参数

英文描述

描叙

delay

 

刷新时间间隔。如果不指定,只显示一条结果。

count

 

刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

-a

The -a switch displays active/inactive memory, given a 2.5.41 kernel or better.

开启显示active/inactive memory。

-f

The -f switch displays the number of forks since boot.  This includes the fork, vfork,  and clone  system calls,  and is equivalent to the total number of tasks created. Each process is represented by one or more tasks, depending on thread usage.  This display does not repeat.

显示此系统启动以来的forks的总数,包括fork、vfork和clone system calls

-m

The -m displays slabinfo

显示slabinfo信息

-n

The -n switch causes the header to be displayed only once rather than periodically.

只显示头信息,不周期性显示.也就是说开启这个参数,只显示头部信息一次。

-s

The -s switch displays a table of various event counters and memory statistics. This display does not repeat.

显示各种事件计数器表和内存统计信息,这显示不重复。

-d

The -d reports disk statistics (2.5.70 or above required)

显示磁盘统计数据(内核要求2.5.70 或以上)

-w

The -w enlarges field width for big memory sizes

可以扩大字段长度,当内存较大时,默认长度不够完全展示内存。

-p

The -p followed by some partition name for detailed statistics (2.5.70 or above required)

显示磁盘分区数据(disk partition statistics )

-S

The -S followed by k or K or m or M switches outputs between 1000, 1024, 1000000, or 1048576 bytes

参数S控制输出性能指标的单位,k(1000) K(1024) 或 M(1048576) 默认单位为K(1024 bytes)

-V

The -V switch results in displaying version information.

 

查看vmstat命令的版本


 (4)实例:

      1)[sunjimeng@localhost ~]$ vmstat          显示虚拟内存使用情况

[sunjimeng@localhost ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0      0 858580    752 506988    0    0     7     1   81  120  2  1 97  0  0
[sunjimeng@localhost ~]$ 
 字段说明:

Procs(进程)

       r: The number of processes waiting for run time.

 

       等待运行的进程数。如果等待运行的进程数越多,意味着CPU非常繁忙。另外,如果该参数长期大于和等于逻辑cpu个数,则CPU资源可能存在较大的瓶颈。

       b: The number of processes in uninterruptible sleep.

         等待IO的进程数量。

       处在非中断睡眠状态的进程数。意味着进程被阻塞。主要是指被资源阻塞的进程对列数(比如IO资源、页面调度等),当这个值较大时,需要根据应用程序来进行分析,比如数据库产品,中间件应用等。


Memory(内存)

       swpd: the amount of virtual memory used.

 

       已使用的虚拟内存大小。如果虚拟内存使用较多,可能系统的物理内存比较吃紧,需要采取合适的方式来减少物理内存的使用。swapd不为0,并不意味物理内存吃紧,如果swapd没变化,si、so的值长期为0,这也是没有问题的

      

       free: the amount of idle memory.

 

       空闲的物理内存的大小

       buff: the amount of memory used as buffers.


       用来做buffer(缓存,主要用于块设备缓存)的内存数,单位:KB

       cache: the amount of memory used as cache.

 

       用来做cache(缓存,主要用于缓存文件)的内存,单位:KB,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

       inact: the amount of inactive memory. (-a option)

 

       inactive memory的总量

       active: the amount of active memory. (-a option)

 

       active memroy的总量。


Swap

       si: Amount of memory swapped in from disk (/s).

 

        从磁盘交换到内存的交换页数量,单位:KB/秒。

 

       so: Amount of memory swapped to disk (/s).

        从内存交换到磁盘的交换页数量,单位:KB/秒

 

   内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。

   当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,这个是不正确的。不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

    当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会 出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,

   但页导入操作就表明了服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。

IO

       bi: Blocks received from a block device (blocks/s).

 

        每秒读取的块数。

        每秒从块设备接收到的块数,单位:块/秒 也就是读块设备。

 

       bo: Blocks sent to a block device (blocks/s).

       

                   每秒写入的块数。

        每秒发送到块设备的块数,单位:块/秒  也就是写块设备。

      注意:

            随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

 

System

       in: The number of interrupts per second, including the clock.

 

        每秒的中断数,包括时钟中断

 

       cs: The number of context switches per second. 

        每秒的环境(上下文)切换次数。比如我们调用系统函数,就要进行上下文切换,而过多的上下文切换会浪费较多的cpu资源,这个数值应该越小越好。

      注意:cs每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

       注 意:

           上面2个值越大,会看到由内核消耗的CPU时间会越大。

CPU(以百分比表示)

       These are percentages of total CPU time.

 

       us: Time spent running non-kernel code. (user time, including nice time)

 

        用户CPU时间(非内核进程占用时间)(单位为百分比)。 us的值比较高时,说明用户进程消耗的CPU时间多。

     用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。

 

       sy: Time spent running kernel code. (system time)

 

         系统使用的CPU时间(单位为百分比)。sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

            内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

 

       id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.

 

        空闲的CPU的时间(百分比),在Linux 2.5.41之前,这部分包含IO等待时间。

 

       wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero.

 

        等待IO的CPU时间,在Linux 2.5.41之前,这个值为0 .这个指标意味着CPU在等待硬盘读写操作的时间,用百分比表示。wait越大则机器io性能就越差。说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

 

    st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

 

使用示例:

[root]$ vmstat 2        每二秒显示一次系统内存的统计信息

[root]$ vmstat 2 5       每二秒显示一次系统内存的统计信息,总共5次 

[root]$ vmstat -a       显示活跃内存与非活跃内存

      使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与vmstat相同。

[root@DB-Server ~]# vmstat -w 2 5
     可以扩大字段长度,当内存较大时,默认长度不够完全展示内存时,会导致字段值偏移,导致查看不便

 (5)其他:

    1.物理内存和虚拟内存区别:

      物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。

      物理内存就是系统硬件提供的内存大小,是真正的内存;在Linux系统下,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存。(更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。)

    2.linux内存运行机制:

      linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

      1)首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。 

      2)其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不用担心什么,只要知道是怎么一回事就可以了。

      3)最后,交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。

      4)因此,合理规划和设计linux内存的使用,是非常重要的。

    3.虚拟内存原理:

      在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

      在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。 分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。 当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

    4.buffer与cache的区别

    buff和cache的主要区别是在控制和速度上。buff的控制相对简单,是对数据流缓冲,将需要的数据流临时缓冲在buff里,以降低低速设备对整体的影响。一般都是对大量的数据交换进行缓冲;cache是对高速交换进行缓冲,需要一些额外的算法来提高效率,比如读取命中之类的,一般相对较小,速度很快,大多是对指令的临时存储。


https://www.cnblogs.com/MenAngel/p/5563180.html

https://www.cnblogs.com/kerrycode/p/6208257.html

https://www.jianshu.com/p/12b1bf6a3ce3



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值