WenJunjie Blog

sysadmin

Web Performance

| Comments

web服务器性能优化 web performance

活体系统观察升级路径,由表及里剥玉米 top ->ss->strace->pstrace->blkstrace->systemap->oprofile

各项性能指标

  1. 网络性能 交换机、路由器的性能 保证TCP/IP 数据传输的稳定性 带宽 减小网络响应时间
  2. 服务器并发能力 吞吐率 并发用户数、请求总数、请求资源描述 影响TPS(QPS)的关键指标:响应时间(RT),资源 QPS: Query-per-second 1秒钟内的请求数量 RT: Response-time 1个请求完成的时间

并发量/数据量 机器配置 单个请求处理速度 稳定运行时间 带宽

磁盘读写主要关注 IOPS: IO/sec r/s w/s吞吐量:KB/s MB/s Disk Read KB/s Disk Write KB/s

CPU Memory IO Network

常用工具 vmstat 全能 mpstat CPU sar 全能 iostat 磁盘 netstat 网络 dstat 聚合 iptraf 网络 ethtool 网络 iperf 网络 tcptrace 包分析

iftop 主机间带宽 nethogs 进程带宽

sar -n DEV -u 10 -P ALL mpstat -P ALL 5

CPU 负载 top uptime cat /proc/loadavg iowait cpu空闲等待I/O操作完成时间的比例 nmon 进程消耗:进程优先级、进程切换(上下文)

top -b -n 1
top
ps axl


# uptime 
 08:37:06 up 2 days, 21:18,  1 user,  load average: 0.81, 0.93, 0.73

load average: 1 5 15 cpux核数x0.7

# vmstat 2 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  1     48 1753432 450268 12678156    0    0    34    36   13   18  6  2 93  0  0
 0  0     48 1754308 450268 12678236    0    0     0   156 6069 2911  9  2 89  0  0
 1  0     48 1749844 450268 12678288    0    0     0     0 7146 3387 10  3 87  0  0
 1  0     48 1747124 450284 12678372    0    0     0   296 7433 3855 12  3 85  0  0
 0  0     48 1754688 450284 12678468    0    0     0     0 8344 4268 14  4 82  0  0
 2  0     48 1750364 450284 12678532    0    0     0     6 5777 2465  7  2 91  0  0

r(运行和等待cpu时间片的进程数or置于运行队列中的内核线程数目)长期大于系统CPU的个数,说明CPU不足 b(置于等待队列(等待资源、等待输入/输出)的内核线程数目) us列显示用户进程消耗CPU时间百分比,us值较高时,说明用户进程消耗CPU时间多,长期大于50%,得需要考虑优化程序或算法 sy列显示内核进程消耗CPU时间百分比,sy值较高时,说明内核消耗CPU的资源很多 us+sy的参考值是80%,超过80%说明可能存在CPU资源不足

# sar -u 3 6
Linux 2.6.18-274.el5 (web-SERVER)    12/14/2012

08:58:25 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle
08:58:28 AM       all      9.00      0.00      2.46      0.00      0.00     88.55
08:58:31 AM       all      6.00      0.00      2.04      0.04      0.00     91.92
08:58:34 AM       all      7.16      0.00      2.46      0.00      0.00     90.38
08:58:37 AM       all     10.08      0.00      2.67      0.00      0.00     87.25
08:58:40 AM       all      8.70      0.00      2.71      0.04      0.00     88.55
08:58:43 AM       all      8.75      0.00      2.79      0.00      0.00     88.46
Average:          all      8.28      0.00      2.52      0.01      0.00     89.18

iowait 小于35%为好,大于35%为坏 user.system,nice, user+system < 70%为好

# sar -d 3 3
Linux 2.6.18-274.el5 (web-SERVER)    12/14/2012

09:05:26 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
09:05:29 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:29 AM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:29 AM   dev8-16     15.00      0.00    328.00     21.87      0.14      9.29      1.78      2.67
09:05:29 AM   dev8-17      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:29 AM   dev8-18      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:29 AM   dev8-19     15.00      0.00    328.00     21.87      0.14      9.29      1.78      2.67
09:05:29 AM  dev253-0     13.00      0.00    104.00      8.00      0.01      0.97      0.03      0.03
09:05:29 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:29 AM  dev253-2      1.00      0.00      8.00      8.00      0.00      0.33      0.33      0.03
09:05:29 AM  dev253-3      8.67      0.00     69.33      8.00      0.12     14.27      2.77      2.40
09:05:29 AM  dev253-4     18.33      0.00    146.67      8.00      0.02      1.25      0.62      1.13

09:05:29 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
09:05:32 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:32 AM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:32 AM   dev8-16     16.72      0.00    551.17     32.96      0.04      2.22      0.14      0.23
09:05:32 AM   dev8-17      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:32 AM   dev8-18      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:32 AM   dev8-19     16.72      0.00    551.17     32.96      0.04      2.22      0.14      0.23
09:05:32 AM  dev253-0     13.04      0.00    104.35      8.00      0.01      0.97      0.03      0.03
09:05:32 AM  dev253-1     48.49      0.00    387.96      8.00      0.11      2.26      0.04      0.20
09:05:32 AM  dev253-2      1.00      0.00      8.03      8.00      0.00      0.00      0.00      0.00
09:05:32 AM  dev253-3      6.35      0.00     50.84      8.00      0.00      0.00      0.00      0.00
09:05:32 AM  dev253-4      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

09:05:32 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
09:05:35 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM    dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM   dev8-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM   dev8-17      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM   dev8-18      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM   dev8-19      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM  dev253-3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
09:05:35 AM  dev253-4      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:      dev8-16     10.56      0.00    292.44     27.71      0.06      5.57      0.92      0.97
Average:      dev8-17      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:      dev8-18      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:      dev8-19     10.56      0.00    292.44     27.71      0.06      5.57      0.92      0.97
Average:     dev253-0      8.67      0.00     69.33      8.00      0.01      0.97      0.03      0.02
Average:     dev253-1     16.11      0.00    128.89      8.00      0.04      2.26      0.04      0.07
Average:     dev253-2      0.67      0.00      5.33      8.00      0.00      0.17      0.17      0.01
Average:     dev253-3      5.00      0.00     40.00      8.00      0.04      8.24      1.60      0.80
Average:     dev253-4      6.11      0.00     48.89      8.00      0.01      1.25      0.62      0.38

await表示平均每次设备I/O操作的等待时间(ms) svctm表示平均每次设备I/O操作的服务时间(ms) %util表示一秒中有百分之几的时间用于I/O操作

%util的值也是衡量I/O的一个重要指标,如%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷在工作,可能存在瓶颈 固态硬盘可能有些不同,需要再验证

sar 1 3
sar -u 1 3 #CPU使用率
sar -q 1 3 #平均负载
sar -r 1 3 #内存使用情况
sar -W     #页面交换情况
sar -n DEV 1 #网卡
sar -n DEV -u -r 3 120 > perform.log

sar -n DEV 1

Linux 2.6.32-358.el6.x86_64 (arch09127) 2014年04月23日 x86_64 (24 CPU)

10时46分11秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10时46分12秒 lo 6.12 6.12 0.57 0.57 0.00 0.00 0.00 10时46分12秒 em1 1805.10 14934.69 207.81 22008.16 0.00 0.00 0.00 10时46分12秒 em2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时46分12秒 em3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时46分12秒 em4 0.00 0.00 0.00 0.00 0.00 0.00 0.00

10时46分12秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10时46分13秒 lo 34.02 34.02 4.11 4.11 0.00 0.00 0.00 10时46分13秒 em1 1895.88 14593.81 196.37 21500.88 0.00 0.00 0.00 10时46分13秒 em2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时46分13秒 em3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10时46分13秒 em4 0.00 0.00 0.00 0.00 0.00 0.00 0.00

sar -n ALL //网卡数据信息:网卡名,收到包数/s,传输包数/s,收到数据量kb/s,传输数据量kb/s,收到压缩包数/s,传输压缩包数/s,收到广播包数/s 10:15:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 10:15:24 AM lo 0.17 0.17 0.01 0.01 0.00 0.00 0.00 10:15:24 AM eth0 5.48 1.75 0.46 0.49 0.00 0.00 0.00 10:25:01 AM lo 0.02 0.02 0.00 0.00 0.00 0.00 0.00 10:25:01 AM eth0 4.57 1.05 0.38 0.21 0.00 0.00 0.00 10:35:01 AM lo 0.03 0.03 0.00 0.00 0.00 0.00 0.00 10:35:01 AM eth0 5.34 1.81 0.45 0.34 0.00 0.00 0.00 Average: lo 0.03 0.03 0.00 0.00 0.00 0.00 0.00 Average: eth0 4.97 1.44 0.41 0.28 0.00 0.00 0.00 //网卡错误数据信息: 网卡名,收到错误包数/s,传输错误包数/s,碰撞包数/s,接收丢弃包数/s,传输丢弃包数/s,错误包数/s,帧对齐错误包数/s,收到溢出错误包数/s, 传输溢出错误包数/s 10:15:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s 10:15:24 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:15:24 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:25:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:25:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:35:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:35:01 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 //网络文件系统客户端数据信息:rpc请求数/s,重新传输rpc请求数/s,读rpc请求数/s,写rpc请求数/s,访问rpc请求数,获取属性rpc请求数/s 10:15:01 AM call/s retrans/s read/s write/s access/s getatt/s 10:15:24 AM 0.00 0.00 0.00 0.00 0.00 0.00 10:25:01 AM 0.00 0.00 0.00 0.00 0.00 0.00 10:35:01 AM 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.00 0.00 0.00 0.00 0.00 0.00 //网络文件系统服务端数据信息:收到rpc请求数/s,收到错误rpc请求数/s,收到网络包数/s,收到udp包数/s,收到tcp包数/s,回复时缓存命中包数/s,回复时缓存未命中包数/s,读请求数/s,写请求数/s,访问请求数/s,获取属性请求数/s 10:15:01 AM scall/s badcall/s packet/s udp/s tcp/s hit/s miss/s sread/s swrite/s saccess/s sgetatt/s 10:15:24 AM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:25:01 AM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:35:01 AM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 //Socket数据信息:系统中总socket数,使用中的tcp socket数,使用中的udp socket数,使用中的raw socket数,队列中的ip碎片数,处于TIME_WAIT状态的tcp socket数 10:15:01 AM totsck tcpsck udpsck rawsck ip-frag tcp-tw 10:15:24 AM 348 29 7 0 0 0 10:25:01 AM 349 29 7 0 0 0 10:35:01 AM 349 29 7 0 0 0 Average: 349 29 7 0 0 0

// 关键字: DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6. //如,查看socket信息: sar -n SOCK 10:15:01 AM totsck tcpsck udpsck rawsck ip-frag tcp-tw 10:15:24 AM 348 29 7 0 0 0 10:25:01 AM 349 29 7 0 0 0 10:35:01 AM 349 29 7 0 0 0 10:45:01 AM 349 29 7 0 0 0 10:55:01 AM 349 29 7 0 0 0 11:05:01 AM 349 29 7 0 0 0 11:15:01 AM 349 29 7 0 0 0 11:25:01 AM 349 29 7 0 0 0 11:35:01 AM 349 29 7 0 0 0 11:45:01 AM 349 29 7 0 0 0 11:55:02 AM 349 29 7 0 0 0 12:05:01 PM 349 29 7 0 0 0 Average: 349 29 7 0 0 0

# iostat 3 3
Linux 2.6.18-274.el5 (web-SERVER)    12/14/2012

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.61    0.13    1.55    0.14    0.00   92.57

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.14         0.03       107.85       6860   27151824
sda1              0.14         0.02       107.85       6116   27151824
sdb              24.05       540.80       463.34  136154189  116652918
sdb1              0.00         0.01         0.00       2022         46
sdb2              0.00         0.01         0.00       1642         24
sdb3             24.05       540.79       463.34  136150213  116652848
dm-0              1.70         0.51        13.43     128674    3380368
dm-1             45.16       536.98       318.90  135192466   80286344
dm-2             13.53         0.02       108.25       4426   27252280
dm-3              1.06         2.23         7.76     562442    1953440
dm-4              1.92         1.04        15.02     261906    3780416

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          10.57    0.00    3.04    0.04    0.00   86.34

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0
sda1              0.00         0.00         0.00          0          0
sdb              12.00         0.00       144.00          0        432
sdb1              0.00         0.00         0.00          0          0
sdb2              0.00         0.00         0.00          0          0
sdb3             12.00         0.00       144.00          0        432
dm-0              0.00         0.00         0.00          0          0
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0
dm-3              0.00         0.00         0.00          0          0
dm-4             18.00         0.00       144.00          0        432

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.12    0.00    2.21    0.08    0.00   91.58

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0
sda1              0.00         0.00         0.00          0          0
sdb              92.03         0.00      1711.63          0       5152
sdb1              0.00         0.00         0.00          0          0
sdb2              0.00         0.00         0.00          0          0
sdb3             92.03         0.00      1711.63          0       5152
dm-0             13.95         0.00       111.63          0        336
dm-1             68.77         0.00       550.17          0       1656
dm-2            124.58         0.00       996.68          0       3000
dm-3              6.64         0.00        53.16          0        160
dm-4              0.00         0.00         0.00          0          0

# mpstat -P ALL
Linux 2.6.18-274.el5 (web-SERVER)    12/16/2012

12:59:02 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:59:02 PM  all   15.68    0.03    1.39    0.06    0.06    1.07    0.00   81.71   3524.54
12:59:02 PM    0   11.12    0.05    0.77    0.03    0.00    0.33    0.00   87.70     23.53
12:59:02 PM    1   20.19    0.01    2.01    0.12    0.08    1.59    0.00   76.01    779.33
12:59:02 PM    2   11.25    0.04    0.93    0.03    0.04    0.86    0.00   86.84    231.14
12:59:02 PM    3   18.14    0.01    1.67    0.08    0.09    1.26    0.00   78.74    574.89
12:59:02 PM    4   11.49    0.04    0.96    0.03    0.03    0.86    0.00   86.59    232.90
12:59:02 PM    5   19.49    0.01    1.74    0.08    0.09    1.33    0.00   77.25    736.32
12:59:02 PM    6   13.06    0.03    1.19    0.03    0.04    0.90    0.00   84.76    281.95
12:59:02 PM    7   20.72    0.01    1.86    0.09    0.09    1.44    0.00   75.79    664.48

dstat

dstat -tclpymsgdn --output status.csv

dstat -cgilpymn

iotop

判断磁盘io写的多还是读的多

iostat -d -k 1 10 #查看TPS和吞吐量信息 iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态

iostat -xm 1

atop

free -m 内存使用情况

vmstat 2 3 查看swap si列表示由磁盘调入内存,也就是内存进入内存交换区的数量 so列表示由内存调入磁盘,也就是内存交换区进入内存的数量 通常si、so的值都为0,若si、so长期不为0,则说明系统内存不足,需加系统内存 swap颠簸 vmstat -s n 3 vmstat -S M

pidstat

磁盘IO概念 读写IO(Read/Write IO) 随机访问(Random Access)和连接访问(Sequentia Access) 顺序IO模式(Queeu Mode)|并发IO模式(Burst Mode) 单个IO大小(IO Chunk Size) 与数据库Block Size 8K 及文件系统块(Block /usr/bin/time -v)无直接关系 IOPS(IO per Second) 磁盘的IOPS,假设磁盘的转速(Rotational Speed)为15K RPM,平均寻道时间为5ms,最大传输速率为40MB/s(读写速度差别较大) 完整的IO操作:控制器对磁盘发出一个IO操作命令,磁盘会去寻址(Seeking),对应寻址时间(Seek Time);旋转延时(Rotational Delay),数据传送(Data Tranfer),对应传送时间(Transfer Time) 寻址时间,通常只考虑平均寻址时间 10krmp 5ms 旋转延时,平均旋转延时 10krpm (60s/15k)*(½)=2ms 传送时间,IO Chunk Size / Max Transfer Rate IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)

4K (1/7.1 ms = 140 IOPS)
    5ms + (60sec/15000RPM/2) + 4K/40MB = 5 + 2 + 0.1 = 7.1
8k (1/7.2 ms = 139 IOPS)
    5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 = 7.2
16K (1/7.4 ms = 135 IOPS)
    5ms + (60sec/15000RPM/2) + 16K/40MB = 5 + 2 + 0.4 = 7.4
32K (1/7.8 ms = 128 IOPS)
    5ms + (60sec/15000RPM/2) + 32K/40MB = 5 + 2 + 0.8 = 7.8
64K (1/8.6 ms = 116 IOPS)
    5ms + (60sec/15000RPM/2) + 64K/40MB = 5 + 2 + 1.6 = 8.6

读取连续分布的磁盘文件

4K (1/0.1 ms = 10000 IOPS)
    0ms + 0ms + 4K/40MB = 0.1
8k (1/0.2 ms = 5000 IOPS)
    0ms + 0ms + 8K/40MB = 0.2
16K (1/0.4 ms = 2500 IOPS)
    0ms + 0ms + 16K/40MB = 0.4
32K (1/0.8 ms = 1250 IOPS)
    0ms + 0ms + 32K/40MB = 0.8
64K (1/1.6 ms = 625 IOPS)
    0ms + 0ms + 64K/40MB = 1.6

传输速度(Transfer)|吞吐率(Throughput) Transfer Rate = IOPS * IO Chunk Size

4K: 140 * 4K  =  560K / 40M = 1.36%
8K: 139 * 8K  = 1112K / 40M = 2.71%
16K: 135 * 16K = 2160K / 40M = 5.27%
32K: 116 * 32K = 3712K / 40M = 9.06%

当磁盘进行连续访问时,IOPS没有参考价值,这时限制实际传输速度是磁盘的最大传输速度 实际应用中,只用IOPS来衡量小IO的随机读写的性能,而当要衡量大IO连续读写的性能时就要采用传输速度了

IO响应时间(IO Response Time)|IO延时(IO Latency) IO响应时间从操作系统内核发出一个读或写的IO命令到操作系统内核收到IO回应的时间(IO操作在磁盘内部处理时间+IO操作在IO等待队列中所花费的等待时间)

8K IO Chunk Size (135 IOPS, 7.2 ms)
135 => 240.0 ms
105 => 29.5 ms
75  => 15.7 ms
45  => 10.6 ms

64K IO Chunk Size(116 IOPS, 8.6 ms)
135 => 没响应了……
105 => 88.6 ms
75  => 24.6 ms
45  => 14.6 ms

随着实际IOPS越接近理论最大值,IO响应时间会非线性增大 实际中指导值是70% 实践中证明过70%也适用于CPU响应时间

测试磁盘写入 /dev/null 输出设备 *nix系统上的黑洞,所有送到此空设备上的内容会凭空消失 /dev/zero 空字符 从/dev/zero读取,源源不断提供空字符(ASCII NUL, 0x00),要多少有多少 4G bs块大小 count写入的块数 测试的是连续写入硬盘的性能 /usr/bin/time dd if=/dev/zero of=/tmp/foo bs=4k count=1024000 测试的是连续读取的性能 /usr/bin/time dd if=/tmp/foo of=/dev/null bs=4k 读写同时测试 /usr/bin/time dd if=/tmp/foo of=/tmp/foo2 bs=4k

fio -filename=/var/www/test/test -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1G -numjobs=30 -runtime=100 -group_reporting -name=mytest -ioscheduler=noop

fio -ioengine=libaio -name=“eba” -direct=1 -thread -rw=randwrite -bs=256k -size=100G -runtime=300s -filename=/dev/vdb -iodenth=64

hdparm -t /dev/hda1

硬盘速度测试 写入 dd if=/dev/zero of=test bs=64k count=4k oflag=dsync 缓存 dd bs=1M count=10 if=/dev/zero of=test conv=fdatasync

dd默认不包括同步sync,以下dd命令,只是把这128MB的数据读到内存缓冲当中(写缓存[write cache]),dd完成后系统才开始真正往磁盘写数据。 dd bs=1M count=256 if=/dev/zero of=test dd bs=1M count=256 if=/dev/zero of=test;sync
记录了256+0 的读入 记录了256+0 的写出 268435456字节(268 MB)已复制,0.148658 秒,1.8 GB/秒

fdatasync,dd命令执行到最后会真正执行一次“同步(sync)”操作,所以这时候你得到的是读取这256M数据到内存并写入到磁盘上所需的时间,这样算出来的时间才是比较符合实际的。 dd bs=1M count=256 if=/dev/zero of=test conv=fdatasync 记录了256+0 的读入 记录了256+0 的写出 268435456字节(268 MB)已复制,2.06487 秒,130 MB/秒

dd bs=1M count=256 if=/dev/zero of=test oflag=dsync ##有问题 记录了256+0 的读入 记录了256+0 的写出 268435456字节(268 MB)已复制,18.0275 秒,14.9 MB/秒

conv=fdatasync与oflag=dsync的区别在于:sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。所以看到的fdatasync速度比dsync好

使用DirectIO方式 dd bs=1M count=256 if=/dev/zero of=test oflag=direct 记录了256+0 的读入 记录了256+0 的写出 268435456字节(268 MB)已复制,3.74028 秒,71.8 MB/秒

同步IO dd bs=1M count=256 if=/dev/zero of=test oflag=sync 记录了256+0 的读入 记录了256+0 的写出 268435456字节(268 MB)已复制,18.0942 秒,14.8 MB/秒

conv=fsync 在dd命令结束前同步数据和元数据(metaData)

conv=fdatasync 在dd命令结束前只同步数据

oflag=sync 使用同步I/O,每次写都要物理写入磁盘

oflag=nonblock 非阻塞I/O, 可以调用不会永远阻塞的 I/O 操作,例如 open, read 和 write 。如果这种操作不能完成,则立即出错返回,应用程序需要主动重试

硬盘与内存传输速度 % sudo /sbin/hdparm -tT /dev/sda 读取

# iostat -x
Linux 2.6.18-274.el5 (web-SERVER)    12/14/2012

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15.70    0.03    2.51    0.06    0.00   81.71

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.21    41.52  0.99 18.41    86.85   480.15    29.23     0.08    4.28   0.39   0.77
sda1              0.00     0.00  0.00  0.00     0.01     0.00   146.19     0.00    3.34   2.93   0.00
sda2              0.00     0.00  0.00  0.00     0.01     0.01    86.57     0.00    4.88   1.93   0.00
sda3              0.21    41.52  0.99 18.41    86.83   480.15    29.23     0.08    4.28   0.39   0.77
dm-0              0.00     0.00  0.00  1.76     0.08    14.10     8.02     0.06   35.48   0.27   0.05
dm-1              0.00     0.00  1.13 44.51    85.70   356.08     9.68     0.07    1.57   0.13   0.60
dm-2              0.00     0.00  0.00 10.00     0.05    80.01     8.00     0.13   12.60   0.21   0.21
dm-3              0.00     0.00  0.05  1.38     0.66    11.01     8.19     0.01    5.71   0.39   0.06
dm-4              0.00     0.00  0.01  2.37     0.34    18.94     8.11     0.01    4.00   0.63   0.15

在进入到操作系统的设备层(/dev/sda)之后,计数器开始对IO操作进行计时,最终的计算结果表现是await,这个值就是我们要的IO响应时间了;svctm是在IO操作进入到磁盘控制器之后直到磁盘控制器返回结果所花费的时间,这是一个实际IO操作所花的时间,当await与svctm相差很大的时候,我们就要注意磁盘的IO性能了

network 1000Mbps/(64B+8B+12B)*8bit) 1,000,000,000bps/8bit/(64+8+12)byte=1,488,095pps

内存分配 系统调用 持久连接

  1. 缓存
  2. 数据库性能
  3. 负载均衡
  4. 共享文件系统
  5. 内容分发和同步
  6. 扩展性

iodump iotop iopp pidstat blktrace

系统测试定位瓶颈

优化

Comments