• iotop命令


    iotop命令是一个用来监视磁盘I/O使用状况的top类工具,iotop具有与top相似的UI,其中包括pid、user、I/O、进程等相关信息等;

    //iotop安装:
    yum -y install iotop
    //或者编译安装
    wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.gz
    tar zxf iotop-0.4.4.tar.g
    python setup.py build
    python setup.py install
    

      

      

    执行iotop显示:

    Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND 
     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
     3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
     4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    
    
    第一行READ和WRITE速率总计;
    第二行:
      tid:线程id,按p可转换进程pid
      PRIO:优先级
      DISK READ:磁盘读取速率
      DISK WRITE:磁盘写取速率
      SWAPIN:swap交换百分比
      IO>:IO等待所占用百分比
      COMMAND:线程/进程详细信息
    

      

    命令格式:

    iotop  -[选项]
      --version://显示程序的版本号并退出
      -h, --help://显示此帮助消息并退出
      -o, --only://仅显示实际执行I / O的进程或线程,只显示在划硬盘的程序
      -b, --batch://非交互模式,批量处理 用来记录日志的
      -n NUM, --iter=NUM://设定循环几次
      -d SEC, --delay=SEC://设定显示时间间隔[秒]
      -p PID, --pid=PID://要监控的进程/线程[全部]
      -u USER, --user=USER://用户监控[全部]
      -P, --processes://只显示进程,而不是所有线程
      -a, --accumulated://显示累积的I / O而不是带宽
      -k, --kilobytes://使用千字节而不是人性化的单位
      -t, --time://在每一行上添加一个时间戳(暗示--batch)
      -q, --quiet://抑制一些标题行(暗示--batch)

    怎么获取该程序正在读的什么文件;

    这个问题其实很简单,通过 lsof 命令我们就可以达到目的:lsof -c APPname

    同样,如果我们知道了被频繁读取的文件是哪个,也可以反查程序:

    iotop查看用户进程,lsof -p pid在按该用户进程 pid 查看所打开的文件,lsof -u username按用户名查看打开的文件,

    列出某用户的某进程打开的文件lsof -u USERNAME -c APPNAME;

    也是可以根据目录进行查询:lsof | grep path;

    结论:

    1.我们给服务器做压力测试时,有的时候很容易碰到磁盘IO读取瓶颈,持续高的IO会导致磁盘读取密集读写磁盘IO成为短板,程序运行过慢;常见的IO服务器例如:数据库服务器,文件服务器,视频服务器等;

    2.使用top命令查看%wa指标,该项阈值表示io waiting等待磁盘磁盘写入完成的时间,一般不能高于30%,假如该值过大且持续很久,就证明遇到了I/O瓶颈,需要对软件进行优化,或对硬件进行升级;

    3.iostat -d -x 1输出磁盘相关统计信息;

    4.iotop定位负载来源于那个进程/线程

    5.可以使用pt-ioprofile工具定位IO文件信息;(是Percona公司开发用于管理MySQL的工具)

     或者使用下列命令进行IO文件定位:

    1.lsof -c oracle  //

    2.lsof | grep path  /oracle/app/oracle.........................

    3.iotop   //查看用户进程

    4.lsof -p pid  //查看该用户下打开的文件

    5.lsof -u oracle   -c oracle   

    lsof命令输出属性字段说明:
    COMMAND:进程的名称
    PID:进程标识符
    USER:进程所有者 
    FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 
    TYPE:文件类型,如DIR、REG等 
    DEVICE:指定磁盘的名称 
    SIZE:文件的大小
    NODE:索引节点(文件在磁盘上的标识) 
    NAME:打开文件的确切名称 
    

      

    补充:如何进行 io 瓶颈测试?

    如何进行大文件IO测试:
    
    1.生成 5g 大小的文件并输出时间,执行速度等信息
    time dd if=/dev/zero of=test.file bs=1G count=5
    2.测试写入20G数据,数据量越大,测试值应该更精确
    sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd  bs=1M count=20000)" 
    sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd  bs=1000K count=20000;sync)"
    dd bs=1M count=20000 if=/dev/zero of=test.dd conv=fdatasync dd命令测试是IO的顺序写和读方
    

      

    另附查看进程工具iopp:http://haibing.org/?p=235

  • 相关阅读:
    从菜鸟腾飞至专家(我的心得)
    SQL 绕圈算法???
    asp access 时间段
    SQL 绕圈算法2???
    月薪三万的一道面试题
    Java方法参数是引用调用还是值调用?——值调用
    简述一个大型交易网站的发展旅程
    Java分布式应用学习笔记04JDK的并发包的集合总结
    ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释
    剖析float型的内存存储和精度丢失问题
  • 原文地址:https://www.cnblogs.com/Alexr/p/9361586.html
Copyright © 2020-2023  润新知