性能调优工具

  • CPU

vmstat (每秒采样一次采5次: vmstat 1 5)查看CPU上下文切换。如下:

[root]# vmstat 1 5 | awk '{print strftime("[%Y-%m-%d %H:%M:%S]"),$0}'
[2019-05-23 16:50:20] procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
[2019-05-23 16:50:20]  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
[2019-05-23 16:50:20]  1  0      0 65288416 595296 59468464    0    0     1    11    0    1  1  1 98  0  0
[2019-05-23 16:50:21]  1  0      0 65285952 595296 59468740    0    0     0     0 7454 10210  0  1 99  0  0
[2019-05-23 16:50:22]  3  0      0 65287908 595296 59468460    0    0     0     0 7821 11081  0  1 99  0  0
[2019-05-23 16:50:23]  1  0      0 65286964 595296 59468536    0    0     0     0 7409 10187  0  1 99  0  0
[2019-05-23 16:50:24]  4  0      0 65288988 595296 59468524    0    0     0     4 7708 10717  0  1 99  0  0

主要关注以下指标:

  • us:用户占用CPU的百分比
  • sy:系统(内核和中断)占用CPU的百分比
  • id:CPU空闲的百分比
  • in:系统中断数
  • cs:每秒上下文切换次数
  • r:可运行进程数,包括正在运行(Running)和已就绪等待运行(Waiting)的。在负载测试中,其可接受上限通常不超过CPU核数的2倍。

CPU使用率通常用us + sy来计算,一般大于80%说明,CPU资源出现瓶颈。同时也要综合参考CPU平均负载Load Average信息。Linux系统中,一般取运行队列的值 + 处于task_uninterruptible状态的进程数(vmstat输出的b)。可以通过top命令查看1分钟、5分钟和15分钟的平均负载值。一般来说平均负载的15min采样大于核数*0.7 就要关注和排查一下高负载的原因。

      

top - 16:56:04 up 16 days,  1:46,  0 users,  load average: 0.10, 0.14, 0.40
Tasks:   7 total,   1 running,   6 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.8 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st, 98.4 id_exact,  0.1 hi_exact,  0.1 irq_exact
KiB Mem : 13141616+total, 65280144 free,  6071468 used, 60064544 buff/cache
KiB Swap: 16777212 total, 16777212 free,        0 used. 12392304+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 111 root 20 0 22.283g 625600 19168 S 1.0 0.5 4:16.83 java 1 root 20 0 11768 1620 1252 S 0.0 0.0 0:00.01 start.sh 112 root 20 0 84632 3624 2744 S 0.0 0.0 0:00.24 sshd 1165 root 20 0 11768 1916 1464 S 0.0 0.0 0:00.01 bash 1183 root 20 0 83900 2096 1516 S 0.0 0.0 0:00.00 su 1184 root 20 0 11764 1836 1480 S 0.0 0.0 0:00.03 bash 1451 root 20 0 51880 1928 1412 R 0.0 0.0 0:00.01 top
  • load average: 0.10, 0.14, 0.40    分别是1分钟,5分钟,15分钟采样数据

 

top -Hp [pid]   查看进程中线程占用资源情况

 

  • 内存

vmstat同样可以反映内存情况:

  • free: 系统可用内存,对于稳定运行的系统,free可接受的范围通常应该大于物理内存的20%。
  • so/si : 每秒从内存写入到SWAP的数据大小/每秒从SWAP读取到内存的数据大小。如果出现频繁的swap交换,会影响系统性能,需要一起注意。
  • swpd:系统当前的swap空间占用。可以和so/si 综合分析。如果swpd为0 ,内存资源没有成为瓶颈

 

  • 磁盘读写IO

使用iostat 

# iostat -dxk 2
Linux 3.10.0-514.6.1.el7.x86_64 (localhost92.localdomain)       05/23/2019      _x86_64_        (16 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.79     3.15    3.87   16.33    81.57   182.10    26.11     0.43   21.35   30.69   19.13   5.44  10.98
dm-0              0.00     0.00    3.15   14.42    55.47   119.19    19.88     0.29   16.48   26.43   14.31   4.91   8.63
dm-1              0.00     0.00    1.26    1.95     5.04     7.78     8.00     0.55  172.21   50.24  251.22   1.14   0.37
dm-2              0.00     0.00    0.31    3.43    21.03    55.13    40.79     0.15   41.03   61.93   39.16   7.97   2.98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     4.00    1.50   22.00    12.00   226.50    20.30     0.26   11.11    0.67   11.82   6.02  14.15
dm-0              0.00     0.00    0.00   23.00     0.00   202.50    17.61     0.28   12.28    0.00   12.28   4.98  11.45
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    1.50    3.00    12.00    24.00    16.00     0.03    7.33    0.67   10.67   6.22   2.80
  • -d  显示设备(磁盘)使用状态
  • -x       显示和io相关的扩展数据
  • -k       某些使用block为单位的列强制使用Kilobytes为单位
  • 2   每2秒采集一次
rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s:   每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:      每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:      每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:   每秒读扇区数。即 delta(rsect)/s
wsec/s:   每秒写扇区数。即 delta(wsect)/s
rkB/s:    每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:    每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:    平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:    平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:    一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
          如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
%idle:    idle小于70% IO压力就较大了,一般读取速度有较多的wait.同时可以结合vmstat 查看查看b参数和wa参数

一般用法:

iostat -d -k 1 10        #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10    #查看设备使用率(%util)、响应时间(await) 
iostat -c 1 10            #查看cpu状态

 

转载于:https://www.cnblogs.com/killerqi/p/10913002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值