IO子系统调优
dmidecode -t processor | grep Socket (物理cpu个数)
dmidecode | grep Size | grep MB (物理内存大小)
dmidecode | grep Size | grep MB | wc -l (物理内存个数)
vmstat,iostat,sar
IO , 输入输出
IOPS
10k , 120-150 IOPS
15k , 150-200 IOPS
每个IO完成的数据量
# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 54108 11540 1609012 0 0 183 1018 1160 1629 16 9 70 5 0
1 0 0 54108 11544 1609060 0 0 0 0 3057 3787 24 14 62 0 0
1 0 0 54140 11552 1609052 0 0 0 28 3169 4098 22 15 63 0 0
bi
bo
wa
# iostat -x 2
# iostat -d 2 /dev/sda2
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda2 17.75 574.41 3247.34 577234 3263312
Blk_read/s 每秒钟读取了多少扇区的数据 ,一扇区=512字节
tps 每秒钟完成了多少个IO(读和写加起来)
# iostat -dk 2 /dev/sda6
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda6 353.00 2.00 70618.00 4 141236
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda6 355.00 2.00 70892.00 4 141784
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda6 348.50 2.00 69822.00 4 139644
# iostat -xk 2 /dev/sda6
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s
sda6 0.00 16660.00 0.50 341.50 2.00 68236.00
avgrq-sz avgqu-sz await svctm %util
399.05 1.10 3.23 2.47 84.55
r/s 每秒钟完成了多少个读IO
w/s 每秒钟完成了多少个写IO
avgrq-sz 平均每秒钟完成多少扇区数据的传输(读+写)
avgqu-sz IO的平均队列长度
await IO请求在队列中等待的时间+服务时间(操作完需要数据),单位毫秒
svctm 服务时间 ,单位毫秒
%util 越接近100,就说明利用率越高。有些时候发现超过100,这是四舍五入导致
思考:sda6设备平均 读IOPS, 写IOPS ,每个IO读取多少数据, 每个IO写入多少数据
每个IO写入多少数据= wkB/s / w/s = 200kb
文件系统的优化:
选择性能更好的文件系统: ext4,xfs,zfs
格式化的时候选择适当参数:块大小
根据存放的文件的平均大小来决定,默认块大小
# dumpe2fs -h /dev/sda1
Block size: 1024
mkfs.ext3 -b 4096 /dev/sda1
web服务等对时间不太重要,可以取消访问时间更新
mount -o noatime .... ....
内核读取设备的调度算法:
# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
# echo "deadline" > /sys/block/sda/queue/scheduler
# vim grub.conf
...
kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/1 rhgb quiet elevator=deadline
...