sysstat
非常全面的一个性能工具开篇一张图
load average
平均负载,0.17,0.20,0.23表示的是
1/5/15`分钟内的平均负载。备注1从第6行就是进程的概要信息了。
其中包括诸多性能监控的工具,常用的如下所示:
# 推荐源码安装
## 先安装GCC
yum -y install gcc git
## 然后克隆代码进行安装
git clone git://github.com/sysstat/sysstat
cd sysstat
./configure --disable-nls --prefix=/usr/local/
make && make install
## 启动服务
systemctl restart sysstat
systemctl enable sysstat
查看版本
# 安装完后,断开shell后重新连接
$ mpstat -V
sysstat version 12.5.6
(C) Sebastien Godard (sysstat <at> orange.fr)
查看一段时间的进程活跃信息,状态为Running
的
# 每隔1秒查看一次,一共查看3次
[root@pressure-201 ~]# pidstat 1 3
Linux 4.19.12-1.el7.elrepo.x86_64 (pressure-201) 12/08/21 _x86_64_ (2 CPU)
14:29:11 UID PID %usr %system %guest %wait %CPU CPU Command
14:29:12 UID PID %usr %system %guest %wait %CPU CPU Command
14:29:13 0 75797 0.00 1.00 0.00 0.00 1.00 0 pidstat
14:29:13 UID PID %usr %system %guest %wait %CPU CPU Command
Average: UID PID %usr %system %guest %wait %CPU CPU Command
Average: 0 75797 0.00 0.33 0.00 0.00 0.33 - pidstat
查看进程的io情况
# 1表示间隔1秒,3表示一共输出3次
[root@mx-05 ~]# pidstat -d -p 1 3
Linux 4.19.91-22.2.al7.x86_64 (mx-05) 2021年12月08日 _x86_64_ (8 CPU)
14时29分50秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
14时29分51秒 0 569 0.00 23.76 0.00 jbd2/vdb1-8
14时29分51秒 0 913 0.00 19.80 0.00 dockerd
14时29分51秒 0 9704 0.00 3.96 3.96 containerd-shim
14时29分51秒 1000 9806 0.00 130.69 71.29 java
查看进程的所有子线程的cpu信息,查看进程的某个线程占用cpu过高,也可以采取该方法。
# 其中9806为进程号,-t表示输出统计信息,-p表示进程号, 2表示每隔2秒输出,3表示一共输出3次
[root@mx-05 ~]# pidstat -t -p 9806 2 3
Linux 4.19.91-22.2.al7.x86_64 (mx-05) 2021年12月08日 _x86_64_ (8 CPU)
14时54分35秒 UID TGID TID %usr %system %guest %CPU CPU Command
14时54分37秒 1000 9806 - 10.95 0.50 0.00 11.44 5 java
14时54分37秒 1000 - 9806 0.00 0.00 0.00 0.00 5 |__java
14时54分37秒 1000 - 29655 0.00 0.00 0.00 0.00 1 |__G1 Refine#4
14时54分37秒 1000 - 6384 2.99 0.50 0.00 3.48 1 |__elasticsearch[a
。。。
# 1是间隔1秒,3表示一共输出3次
[root@pressure-201 ~]# iostat -x 1 3
Linux 4.19.12-1.el7.elrepo.x86_64 (pressure-201) 12/08/21 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.32 0.00 0.18 0.00 0.00 99.50
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
dm-0 0.02 0.82 0.00 0.00 1.01 45.19 0.48 109.16 0.00 0.00 2.03 229.38 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.02
dm-1 0.00 0.00 0.00 0.00 0.06 24.09 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 0.00 0.00 0.00
或者
# 参数-d表示显示设备磁盘的使用状态;
# -k表示某些使用block为单位的列强制使用kilobytes为单位。 -m为K换位M
# 2表示数据每隔2秒刷新一次 6表示一共刷新6次
[root@mx-65 ~]# iostat -d -k 2 1
Linux 4.19.91-24.1.al7.x86_64 (mx-65) 12/08/21 _x86_64_ (4 CPU)
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
vda 10.59 184.11 35.87 0.00 1162285133 226453113 0
输出信息意义
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确
查看网络吞吐量,对于bps和pps都有效果
sar --human -n DEV 2 4 #查看网络设备的网络吞吐量,每隔2秒输出1次,一个输出4次 human表示单位
sar --human -n DEV 2 4 | grep ens33 # 只查看某个网卡的
查看cpu的情况
[root@mx-05 sa]# sar --human 2 3
Linux 4.19.91-22.2.al7.x86_64 (mx-05) 12/08/21 _x86_64_ (8 CPU)
15:56:25 CPU %user %nice %system %iowait %steal %idle
15:56:27 all 6.4% 0.0% 1.3% 0.6% 0.0% 91.6%
15:56:29 all 2.1% 0.0% 1.1% 0.0% 0.0% 96.7%
15:56:31 all 4.7% 0.0% 1.1% 0.1% 0.0% 94.0%
Average: all 4.4% 0.0% 1.2% 0.3% 0.0% 94.1%
优势在于,一次能够看多个不同类型的指标。
[root@mx-05 sa]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1886060 1230660 4977508 0 0 18 189 1 0 2 1 97 0 0
0 0 0 1883816 1230660 4979600 0 0 0 1338 7249 12095 4 1 95 0 0
3 0 0 1885088 1230660 4978816 0 0 0 228 6569 11716 2 1 97 0 0
[root@mx-65 ~]# mpstat 2 3
Linux 4.19.91-24.1.al7.x86_64 (mx-65) 12/08/21 _x86_64_ (4 CPU)
19:55:29 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19:55:31 all 1.64 0.00 1.52 0.00 0.00 0.13 0.00 0.00 0.00 96.72
19:55:33 all 2.15 0.00 1.65 0.00 0.00 0.13 0.00 0.00 0.00 96.07
19:55:35 all 2.40 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 95.58
生成和解析TCP/IP协议数据包汇编/分析的开源工具,可以用来进行:洪水攻击
hping3 -S -p 80
查看系统软中断的次数
$ watch -d cat /proc/softirqs
Every 2.0s: cat /proc/softirqs Wed Dec 8 14:43:43 2021
CPU0 CPU1 CPU2 CPU3
HI: 0 1 0 0
TIMER: 3953236589 3820984042 3983670880 3798287639
NET_TX: 38291417 3677459 38238437 2527695
NET_RX: 2427513379 436348199 2440027908 434966544
BLOCK: 0 0 0 0
IRQ_POLL: 0 0 0 0
TASKLET: 1132212 12601 607401 12528
SCHED: 1654027503 1601501933 1645590675 1575244373
HRTIMER: 5192 6 5045 6
RCU: 1301657166 1236721365 1370222958 1232914689
# -g 开启调用关系分析,-p 指定 php-fpm 的进程号 21515
$ perf top -g -p 21515
# 记录性能事件,等待大约 15 秒后按 Ctrl+C 退出
$ perf record -g
# 查看报告
$ perf report
查看当前进程的目录树
pstree
pstree | grep nginx
[root@mx-05 ~]# pstree -aps 980systemd,1 --switched-root --system --deserialize 22 └─containerd-shim,925 -namespace moby -id 5738aa6f4b6e160144d2a2987b8782ebcc37e5cebeb2a0abce70f0fa26237da6 -address /run/containerd/containerd.sock └─java,980 -Xms512m -Xmx512m -Dspring.cloud.discovery.client.simple.instances.oap-service[0].uri=http://skywalking-oap:12800 -jar webapp/skywalking-webapp.jar ├─{java},1097 ├─{java},1098
ab测试
# 并发10个请求,总共测试10000个请求
$ ab -c 10 -n 10000 http://10.240.0.5:10000/
# 请求时长设置为10分钟 60*10
$ ab -c 5 -t 600 http://192.168.0.10:10000/
# websocket 压测
ab -n 10000 -c 10 https://xxx.xxx
execsnoop