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 内核参数调优 之 原理和参数介绍

  • 相关阅读:
    内置函数——filter和map
    递归函数
    内置函数和匿名函数
    迭代器和生成器
    装饰器函数
    函数进阶
    COGS 2533. [HZOI 2016]小鱼之美
    COGS 2532. [HZOI 2016]树之美 树形dp
    COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
    bzoj1303: [CQOI2009]中位数图
  • 原文地址:https://www.cnblogs.com/diantong/p/11277522.html
Copyright © 2011-2022 走看看