• linux查看磁盘IO


    1、top命令观察CPU信息

    10:06:09 up 17:34 6 users 

    load average: 18.02,17.53,14.23  

    表示当前时间 系统运行时间 格式为时:分 当前登录用户数 分别是1分钟、5分钟、15分钟的负载情况



    load average: 如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

    Tasks: 548 total  1 running  547sleeping  0 stopped 0 zombie 
    进程总数 正在运行的进程数 睡眠的进程数 停止的进程数 僵尸进程数

      

      

    15.2 us  用户空间占用CPU百分比
    5.2 sy 内核空间占用CPU百分比
    0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
    78.0 id  id 空闲CPU百分比
    1.6 wa  等待输入输出的CPU时间百分比    wa 的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。
    0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
    0.0 si 软中断(Software Interrupts)占用CPU的百分比
    0.0 st  

      

    52827945+total 56582748 free 42740140+used 44295304 buff/cache
    物理内存总量(512G) 空闲内存总量(50G) 使用中的内存总量 用作内核缓存的内存量


    单位是KB

    999420 total 799620 free, 199800 used 56961920 avail Mem 
    交换区总量 空闲交换区总量 使用的交换区总量 代表可用于进程下一次分配的物理内存数量

    2、vmstat命令

      vmstat 命令报告关于线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。

     如果发现等待的进程和处在非中断睡眠状态的进程数非常多,并且发送到块设备的块数和从块设备接收到的块数非常大,那就说明磁盘io比较多。

    vmstat参数解释:

    这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。

    Procs

    r: 等待运行的进程数(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
    b: 处在非中断睡眠状态的进程数 ,表示阻塞的进程
    w: 被交换出去的可运行的进程数

    Memory

    单位:KB
    swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

    free: 空闲的内存,单位KB

    buff: 被用来做为缓存的内存数,单位:KB

    cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

    Swap

    单位:KB/秒

    si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

    so 从内存交换到磁盘的交换页数量, 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上

    IO

    单位:块/秒

    bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

    bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

    System

    in 每秒CPU的中断次数,包括时间中断

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

    CPU

    us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

    sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

    id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
    wt 等待IO CPU时间。

      

    3、iostat命令

    Centos的安装方式是:yum install sysstat

    Ubuntu的安装方式是: aptitude install sysstat

    iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析

    使用:iostat显示所有设备的负载情况

    %user:CPU处在用户模式下的时间百分比。

    %nice:CPU处在带NICE值的用户模式下的时间百分比。

    %system:CPU处在系统模式下的时间百分比。

    %iowait:CPU等待输入输出完成时间的百分比。    如果%iowait的值过高,表示硬盘存在I/O瓶颈

    %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

    %idle:CPU空闲时间百分比。  如果%idle值高,表示CPU较空闲,,如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。 如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU

    tps:该设备每秒的传输次数

    kB_read/s:每秒从设备(drive expressed)读取的数据量;

    kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

    kB_read:  读取的总数据量;

    kB_wrtn:写入的总数量数据量;

    使用: iostat -dx 显示磁盘扩展信息

    r/s 和 w/s 分别是每秒的读操作和写操作,而rKB/s 和wKB/s 列以每秒千字节为单位显示了读和写的数据量。如果这两对数据值都很高的话说明磁盘io操作是很频繁。

     

    定时显示所有信息:    iostat 2  3    # 【每隔2秒刷新显示,且显示3次】

    显示指定磁盘信息:    iostat -d /dev/sda

    显示tty和Cpu信息:   iostat -t

    以M为单位显示所有信息:  iostat -m

    查看CPU状态:    iostat -c 1 1

    查看设备使用率(%util)、响应时间(await):   iostat -d -x -k 1 1  #【-d 显示磁盘使用情况,-x 显示详细信息】

     

    rrqm/s:  每秒进行 merge 的读操作数目.即 delta(rmerge)/s
    wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
    %util: 一秒中有百分之多少的时间用于 I/O;;;如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷
    idle小于70% IO压力就较大了,一般读取速度有较多的wait。

    以上各列的含义如下:

    选项说明
    rrqm/s 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
    wrqm/s 每秒对该设备的写请求被合并次数
    r/s 每秒完成的读次数
    w/s 每秒完成的写次数
    rkB/s 每秒读数据量(kB为单位)
    wkB/s 每秒写数据量(kB为单位)
    avgrq-sz 平均每次IO操作的数据量(扇区数为单位)
    avgqu-sz 平均等待处理的IO请求队列长度
    await 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
    svctm 平均每次IO请求的处理时间(毫秒为单位)
    %util 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

      

      

      

      

      

     

      

     

      

      

      

      

     

      

     

  • 相关阅读:
    (转)浅析epoll-为何多路复用I/O要使用epoll
    (转)C++对象的内存布局
    (转)C++ 虚函数表解析
    VS2008文件编码格式修改
    ubuntu与windows相关配置内容
    (转)windows宿主机,ubuntu虚拟机下的上网设置(有线网络和无线网络)
    第10章 名字控制
    php 代码重用
    php 变量
    php in_array 和 str_replace
  • 原文地址:https://www.cnblogs.com/carey9420/p/12881030.html
Copyright © 2020-2023  润新知