-
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状态