zoukankan      html  css  js  c++  java
  • Linux iotop工具简介

    iotop的简介:

     

    iotop是一款开源、免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息。它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控,而iotop是进程级别IO监控。目前最新的版本为iotop 0.6。其官方网址http://guichaz.free.fr/iotop/

     

    iotop的安装:

     

    注意,iotop的安装有前提条件(如果操作系统不满足这些条件,iotop无法正确安装):

     

      1:内核版本为2.6.20或更高版本

      2Python 2.7或更高的版本

     

    官方文档的详细介绍如下:

     

    Linux has always been able to show how much I/O was going on (the bi and bo columns of the vmstat 1 command).

    Iotop is a Python program with a top like UI used to show of behalf of which process is the I/O going on. It requires Python ≥ 2.7 and a Linux kernel ≥ 2.6.20 with the TASK_DELAY_ACCT CONFIG_TASKSTATS, TASK_IO_ACCOUNTING and CONFIG_VM_EVENT_COUNTERS options on.

     

     

    iotopyum安装

     

    yum安装是最简单、快捷的。前提条件是你有配置yum的源配置。

     

    [root@DB-Server ~]# python -V
    Python 2.7.5
    [root@DB-Server ~]# uname -a
    Linux DB-Server 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    [root@DB-Server ~]# 
     
     
    [root@DB-Server ~]# yum -y install iotop

     

     

    iotop的源码安装

     

     

    wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.bz2
    tar -xvf iotop-0.6.tar.gz 
    cd iotop-0.6
    python setup.py build
    python setup.py install

     

     

    iotop的参数

     

     

    # iotop --help
    Usage: /usr/local/sbin/iotop [OPTIONS]
     
    DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
    period. SWAPIN and IO are the percentages of time the thread spent respectively
    while swapping in and waiting on I/O more generally. PRIO is the I/O priority at
    which the thread is running (set using the ionice command).
     
    Controls: left and right arrows to change the sorting column, r to invert the
    sorting order, o to toggle the --only option, p to toggle the --processes
    option, a to toggle the --accumulated option, i to change I/O priority, q to
    quit, any other key to force a refresh.
     
    Options:
      --version             show program's version number and exit
      -h, --help            show this help message and exit
      -o, --only            only show processes or threads actually doing I/O
      -b, --batch           non-interactive mode
      -n NUM, --iter=NUM    number of iterations before ending [infinite]
      -d SEC, --delay=SEC   delay between iterations [1 second]
      -p PID, --pid=PID     processes/threads to monitor [all]
      -u USER, --user=USER  users to monitor [all]
      -P, --processes       only show processes, not all threads
      -a, --accumulated     show accumulated I/O instead of bandwidth
      -k, --kilobytes       use kilobytes instead of a human friendly unit
      -t, --time            add a timestamp on each line (implies --batch)
      -q, --quiet           suppress some lines of header (implies --batch)

     

     

    参数

    长参数

    参数描述

     

    --version

    显示版本号

    -h

    --help

    显示帮助信息

    -o

    --only

    只显示正在产生I/O的进程或线程,运行过程中,可以通过按o随时切换

    -b

    --batch

    非交互模式下运行,一般用来记录日志。

    -n NUM

    --iter=NUM

    设置监控(显示)NUM次,主要用于非交互模式。默认无限

    -d SEC

    --delay=SEC

    设置显示的间隔秒数,支持非整数

    -p PID

    --pid=PID

    只显示指定进程(PID)的信息

    -u USER

    --user=USER

    显示指定的用户的进程的信息

    -P

    --processes

    只显示进程,不显示所有线程

    -a

    --accumulated

    累积的I/O,显示从iotop启动后每个进程累积的I/O总数,便于诊断问题

    -k

    --kilobytes

    显示使用KB单位

    -t

    --time

    非交互模式下,加上时间戳。

    -q

    --quiet

    只在第一次监测时显示列名. 去除头部一些行:这个参数可以设置最多3次来移除头部行:-q列头部只在最初交互显示一次;-qq列头部不显示;-qqqI/O的总结不显示

     

     

     

    iotop的快捷键

     

    r:反向排序,

    o:切换至选项--only

    p:切换至--processes选项,

    a:切换至--accumulated选项

    q:退出 

    i:改变线程的优先级

     

     

    iotop的例子

     

     

    1:只显示正在产生I/O的进程

     

    # iotop -o

    clip_image001

     

     

    2:使用非交互模式将iotop命令输出信息写入日志

     

    #nohup iotop -b -o -n 10 -d 5 -t  > /tmp/iotop.log &

     

     

    3:借助iotop命令找到消耗I/O最高的进程,然后通过进程找到其正在执行的SQL语句

     

    # iotop -oP

     PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                     

    11741 be/4 oracle      4.70 M/s    0.00 B/s  0.00 % 98.60 % ora_s004_SCM2

    11739 be/4 oracle     66.99 M/s    0.00 B/s  0.00 % 93.30 % ora_s005_SCM2

    11741 be/4 oracle     21.76 M/s    0.00 B/s  0.00 % 91.78 % ora_s006_SCM2

    11743 be/4 oracle      4.87 M/s    3.78 M/s  0.00 % 27.74 % ora_s007_SCM2

    11745 be/4 oracle     62.39 K/s    0.00 B/s  0.00 %  2.88 % ora_s008_SCM2

    11733 be/4 oracle     39.00 K/s    0.00 B/s  0.00 %  2.08 % ora_s002_SCM2                

    11697 be/4 oracle      0.00 B/s 1879.61 K/s  0.00 %  0.30 % ora_dbw0_SCM2

    11699 be/4 oracle      0.00 B/s  102.36 K/s  0.00 %  0.20 % ora_lgwr_SCM2

     

    在找到消耗I/O最大的进程后,找出ORACLE进程正在执行的SQL语句

     

    SQL> @getsql_by_spid.sql

    Enter value for pid: 11741

    old  13:                                WHERE c.spid = '&pid'))

    new  13:                                WHERE c.spid = '11741'))

     

    SQL_TEXT

    --------------------------------------------

    ...............................(实际环境中,这里会输出SQL语句)

     

     

    getsql_by_spid.sql脚本如下所示

     

    SELECT   /*+ ORDERED */
             sql_text
        FROM v$sqltext a
       WHERE (a.hash_value, a.address) IN (
                SELECT DECODE (sql_hash_value,
                               0, prev_hash_value,
                               sql_hash_value
                              ),
                       DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
                  FROM v$session b
                 WHERE b.paddr = (SELECT addr
                                    FROM v$process c
                                   WHERE c.spid = '&pid'))
    ORDER BY piece ASC
    /

     

     

    这里只简单列了几个例子,因为iotop命令非常简单,了解iotop的参数和快捷方式后,基本上只需根据实际需求去获取进程或信息的I/O信息,剩下就是分析判断了。

  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/kerrycode/p/11344506.html
Copyright © 2011-2022 走看看