(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