Linux系統調優——磁盤I/O(三)

(1).查看I/O運行狀態相關工具html

 1)查看文件系統塊大小node

  對於ext4文件系統,查看文件系統塊大小linux

[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文件系統,查看文件系統塊大小ios

[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)iostatvim

  這個命令須要安裝,直接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

  測試:post

[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也須要安裝flex

[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 內核參數調優 之 原理和參數介紹

相關文章
相關標籤/搜索