zoukankan      html  css  js  c++  java
  • vmstat命令

    vmstat命令:用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况。(vmstat reports information about processes, memory, paging, block IO, traps, and cpu activity.)

    vmstat 命令的输出

    vmstat 1 10

    1代表每一秒进行一次采样,10代表采样10次

    image

    1、字段详解

    类别 字段 释义
    procs r

    等待执行的任务数,显示正在执行和等待CPU资源的任务个数,当这个值超过了CPU数目,代表出现了CPU瓶颈

    如果r经常大于4,且id经常少于40,表示cpu的负荷很重。

    b 表示阻塞的进程数量
    memory swpd 正在使用的swap大小,单位为Kbyte,虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了
    free 空闲的内存空间,单位为kbyte
    buff 已使用的buff大小,单位为kbyte,属于内存中的一个区域,先写入buff,再写入磁盘
    cache

    已使用的cache大小,单位为kbyte,属于内存中的一个区域,先写入cache,CPU再读取

    linux下内存利用率算法:(cache+buffers+free)/total

    swap si 每秒从swap读出的内存,in是读,如果这个值大于0,表示物理内存不够用或者内存泄露了,单位是KB
    so置换到swap的内存,,out是写,如果这个值大于0,表示物理内存不够用或者内存泄露了,单位是KB
    iobi

    每秒读取的块数(读磁盘),默认块大小是1024byte

    注:All linux blocks are currently 1024 bytes. Old kernels may report blocks as 512 bytes,

    2048 bytes, or 4096 bytes

    bo每秒写入的块数(写磁盘)
    systemin

    每秒CPU的中断次数,包括时间中断;中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号,

    中断允许让设备,如键盘,串口卡,并口等设备表明它们需要CPU,如果cpu利用率在合理范围内,大量的中

    断也是可以接受的。一个巨大的中断值,同时伴随着缓慢的系统性能表现,可能是模块使用不当或者硬件上出

    问题导致外设不断给CPU送中断;

    cs

    每秒上下文切换次数。

    上下文切换是指CPU从一个进程切换到另一个进程,这个过程也是需要消耗一定时间的。如果说上下文切换过于频繁,

    说明CPU用于执行进程代码的时间少了,CPU像个搬运工,频繁在寄存器和运行队列之间奔波 ,更多的时间花在了

    进程切换,而不是真正工作的进程上。。这个值要越小越好,太大了,要考虑调低线程或者进程的数目,CPU没有充

    分利用,是不可取的。

    还可以使用:sar -w来查看上下文切换的

    cpu     us

    用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器

    在做压力测试,性能表现不佳)

    sy系统CPU时间,如果太高,表示系统调用时间长,说明系统内核消耗的CPU资源多,例如是IO操作频繁
    id

    空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,

    sy是系统CPU使用率

    若系统的CPU的idle很高,但是系统响应慢时,可能是CPU等待分配内存,此时应加大内存

    wa

    等待IO CPU时间,wa的值比较高时,说明IO等待比较严重,可能是由于磁盘大量做随机访问造成,

    也可能是磁盘的带宽出现瓶颈

    关于io的bi与bo参数:

    在根目录下执行du -sh * 命令,bi有变化,代表bi是读取磁盘。

    image

    2、一些概念

    2.1 CPU中断

    CPU 是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配CPU 资源,合理安排进程抢占 CPU,并决定哪个进程该使用 CPU、哪个进程该等待。操作系统内核里的进程调度主要用来调度两类资源:进程(或线程)和中断,进程调度给不同的资源分配了不同的优先级,优先级最高的是硬件中断,其次是内核(系统)进程,最后是用户进程。每个 CPU 都维护着一个可运行队列,用来存放那些可运行的线程。线程要么在睡眠状态(blocked 正在等待 IO)要么在可运行状态,如果 CPU 当前负载太高而新的请求不断,就会出现进程调度暂时应付不过来的情况,这个时候就不得不把线程暂时放到可运行队列里。

    2.2 上下文切换

    context switch过高会导致CPU像个搬运工,频繁在寄存器和运行队列之间奔波 ,更多的时间花在了线程切换,而不是真正工作的线程上。直接的消耗包括CPU寄存器需要保存和加载,系统调度器的代码需要执行。间接消耗在于多核cache之间的共享数据。

    引起上下文切换的原因
    • 当前任务的时间片用完之后,系统CPU正常调度下一个任务;
    • 当前任务碰到IO阻塞,调度线程将挂起此任务,继续下一个任务;
    • 多个任务抢占锁资源,当前任务没有抢到,被调度器挂起,继续下一个任务;
    • 用户代码挂起当前任务,让出CPU时间;
    • 硬件中断;

    通过如下命令也可以查看到上下文切换的情况,除非每秒超过100000次或更多,一般都不用担心上下文切换

    sar -w 1

    -w     Report task creation and system switching activity.

           proc/s
                   Total number of tasks created per second.

           cswch/s
                   Total number of context switches per second.

    image

    通过如下命令查看进程的上下文切换的情况

    pidstat -w -p 12345 1
    12345是PID,1代表1秒钟输出一次

    2.3 IO密集型和CPU密集型业务

    • IO密集型指的是系统的CPU耗能相对硬盘/内存的耗能要好很多,此时,系统运作,大部分的状况是CPU在等I/O(硬盘/内存)的读写,此时CPU负载不高
    • CPU密集型指的是系统硬盘/内存耗能相对CPU的耗能要好很多,此时,系统运作,大部分的状况是CPU负载100%,CPU要读写I/O,IO在很短的时间就可以完成,而CPU还有很多运算要处理,CPU负载很高,大部分时间用来计算,逻辑判断等CPU动作的程序


        

    参考:https://blog.csdn.net/langkeziju/article/details/47166399

    参考:https://www.cnblogs.com/tommyli/p/3746187.html

    参考:https://blog.csdn.net/aobama12/article/details/61632815

    参考:https://blog.csdn.net/weixin_36795183/article/details/77930046

    参考:https://blog.csdn.net/mimi_csdn/article/details/79375471

  • 相关阅读:
    Xcode7下模拟器输入文本无法显示系统键盘的解决办法
    Mac系统下开启和关闭隐藏文件的方法
    iOS常用第三方开源框架和优秀开发者博客等
    UILabel 的一个蛋疼问题
    学习进度条
    学习进度条
    四则运算2
    学习进度条
    第一次被要求连接数据库的课堂测试
    课后作业06多态与接口
  • 原文地址:https://www.cnblogs.com/fuqu/p/10092954.html
Copyright © 2011-2022 走看看