zoukankan      html  css  js  c++  java
  • Linux系统调优——磁盘I/O(三)

    (1).查看I/O运行状态相关工具

     1)查看文件系统块大小

      对于ext4文件系统,查看文件系统块大小

    [root@CentOS6 ~]# tune2fs -l /dev/sda1 | grep size
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
    Block size:               1024  //1024字节,为1KB
    Fragment size:            1024
    Flex block group size:    16
    Inode size:               128

      对于xfs文件系统,查看文件系统块大小

    [root@youxi1 ~]# xfs_growfs -l /dev/sda1 | grep bsize
    log size unchanged, skipping
    data     =                       bsize=4096   blocks=262144, imaxpct=25  //4KB
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=2560, version=2
    

     2)iostat

      这个命令需要安装,直接yum安装就好

    [root@youxi1 ~]# yum -y install sysstat
    [root@youxi1 ~]# iostat -d -k -p /dev/sda  //-d仅显示磁盘统计信息;-k以K为单位显示每秒磁盘请求数,默认单位块;-p device|ALL 用于显示块设备及系统分区的统计信息
    Linux 3.10.0-862.el7.x86_64 (youxi1)    2019年07月31日  _x86_64_        (4 CPU)
    
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    sda               1.91        43.02         3.14     158377      11574
    sda1              0.50         1.54         0.56       5662       2048
    sda2              1.41        41.20         2.59     151667       9526
    

      说明如下:

    kB_read/s 每秒从磁盘读入的数据量,单位为K
    kB_wrtn/s 每秒向磁盘写入的数据量,单位为K
    kB_read 读入的数据总量,单位为K
    kB_wrtn 写入的数据总量,单位为K

      测试:

    [root@youxi1 ~]# dd if=/dev/zero of=a.txt bs=10M count=1000; sync  //sync同步到硬盘上,方便看到效果
    //另外打开一个窗口 [root@youxi1 ~]# iostat -p sda -dk  //选了一个最接近巅峰的,可以看到每秒写入的数据量 Linux 3.10.0-862.el7.x86_64 (youxi1) 2019年07月31日 _x86_64_ (4 CPU) Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 3.47 20.39 1298.81 160925 10252872 sda1 0.23 0.72 0.26 5662 2048 sda2 3.23 19.54 1298.55 154215 10250824

     3)iotop

      iotop也需要安装

    [root@youxi1 ~]# yum -y install iotop
    

      打开两个窗口,其中一个窗口先运行iotop -o -d 1命令,另一个窗口运行“dd if=/dev/zero of=a.txt bs=10M count=1000; sync”命令,这时候运行iotop命令的窗口可以看到如下情况。

      iotop常用参数:-o,--only只显示在读写磁盘的程序

             -d SEC,--delay=SEC设置刷新时间

      iotop常用交互命令:左右方向键,改变排序方式,默认IO排序

               r改变排序顺序

               o只显示有IO输出的进程

               p进程/线程的显示方式的切换

               a显示累计使用量

               q退出

     4)测试硬盘速度:hdparm和dd

      一般使用hdparm来测试硬盘顺序读的速度,dd来测试硬盘顺序写的速度。

      hdparm需要自行安装,测试。

    [root@youxi1 ~]# yum -y install hdparm
    [root@youxi1 ~]# hdparm -t --direct /dev/sda  //-t不使用预先的数据缓冲,标示了Liunx下没有任何文件系统开销时磁盘可以支持多快的连续数据读取
    //--direct直接绕过缓存进行统计数据
    /dev/sda:
     Timing O_DIRECT disk reads: 1226 MB in  3.03 seconds = 404.72 MB/sec
    

      dd是自带的命令。但需要先了解两个特殊设备:/dev/null伪设备,回收站,写该文件不会产生IO开销/dev/zero伪设备,会产生空字符流,读该文件不会产生IO开销

    [root@youxi1 ~]# dd if=/dev/zero of=/test.dbf bs=1M count=2000 oflag=direct,nonblock
    记录了2000+0 的读入
    记录了2000+0 的写出
    2097152000字节(2.1 GB)已复制,14.5182 秒,144 MB/秒
    

      可以看到,在14.5182秒的时间里,生成2000M的一个文件,IO写的速度约为144MB/秒,这就是我的硬盘顺序写速度了。当然这个速度可以多测试几遍取一个平均值。

      说明:oflag=direct,nonblock中的direct表示读写数据采用直接IO方式;nonblock表示读写数据采用非阻塞IO方式,这样绕开缓存,测试的更准确。

    (2).磁盘I/O的简单调优

     1)ulimit资源限制

      查看所有的资源限制信息

    [root@youxi1 ~]# ulimit -a
    core file size          (blocks, -c) 0  //kdump转储功能打开后产生的core file大小限制
    data seg size           (kbytes, -d) unlimited  //数据段大小限制
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited  //文件大小限制
    pending signals                 (-i) 15640
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024  //打开的文件个数限制
    pipe size            (512 bytes, -p) 8  //管道大小限制
    POSIX message queues     (bytes, -q) 819200  //消息队列大小限制
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192  //栈大小限制
    cpu time               (seconds, -t) unlimited  //CPU使用时间限制
    max user processes              (-u) 15640  //最大用户进程数限制
    virtual memory          (kbytes, -v) unlimited  //虚拟内存限制
    file locks                      (-x) unlimited
    

      临时修改资源限制,例如文件打开的个数

    [root@youxi1 ~]# ulimit -n  //查看
    1024
    [root@youxi1 ~]# ulimit -n 2048  //修改
    [root@youxi1 ~]# ulimit -n  //再次查看
    2048
    

      永久修改资源限制需要前往配置文件/etc/security/limits.conf,然后重启系统。每行格式:<范围> <类型> <项目> <数值>。<范围>可以是用户名、@组名、*(所有),还有一个%组名用于maxlogin限制(最大登录数目)。<类型>只有soft和hard,soft是软限制,可以理解为警告值,hard是真正意义上的最大值,超过会报错,所以soft的值不能大于hard的值。<项目>的值就比较多了,可以具体查看文件里的注释。

      这里演示修改打开的文件最大数

    [root@youxi1 ~]# vim /etc/security/limits.conf
    *       soft    nofile  4096
    *       hard    nofile  4096
    [root@youxi1 ~]# ulimit -n  //重启之前查看一下
    2048
    [root@youxi1 ~]# init 6
    [root@youxi1 ~]# ulimit -n  //重启之后再查看
    4096
    

      另外还有一个目录/etc/security/limits.d/下面也会有一些配置文件,例如我下面的20-nproc.conf文件,这是一个进程限制配置文件

    [root@youxi1 ~]# vim /etc/security/limits.d/20-nproc.conf  //我这里自带了两个
    * soft nproc 4096
    root soft nproc 10240  //这里原本是unlimited,现在改为10240
    [root@youxi1 ~]# ulimit -u  //重启之前查看一下
    15640
    [root@youxi1 ~]# init 6
    [root@youxi1 ~]# ulimit -u  //重启之后再查看
    10240

      

    追加:linux IO 内核参数调优 之 原理和参数介绍

  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/diantong/p/11277522.html
Copyright © 2011-2022 走看看