pidstat_pidstat

1、工具简介

mpstat 用来查看系统每个 CPU 的性能指标,以及所有 CPU 的平均指标。

vmstat 可以查看系统上下文切换、内存。

前两个只给出了系统总体的情况,要想查看每个进程的详细情况,就需要使用 pidstat。

pidstat 用来查看具体进程的 CPU、内存、I/O 以及上下文切换等性能指标。

pidstat 默认显示进程的数据,加 -t 参数可以输出线程的数据。加 -w 参数可以输出上下文切换情况。

2、平均负载

$ uptime

12:49:05 up 2 days, 10:26, 2 users, load average: 0.11, 0.08, 0.02

12:49:05 是当前时间;

up 2 days, 10:26 是系统运行时间;

2 users 是正在登录用户数(因为我开了 2 个ssh终端,所以是 2);

load average 三个值分别是过去 1、5、15 分钟的平均负载(top命令的第一行也有输出)。平均负载是平均活跃进程数,如果这三个值相差不大,说明系统负载很平稳。

获取 CPU 数量可以用命令:

$ grep 'model name' /proc/cpuinfo | wc -l

1

最理想的情况是每个 CPU 上都刚好运行着一个进程,每个 CPU 都得到了充分利用。

当平均负载比 CPU 个数大的时候,系统已经出现了过载。

当平均负载高于 CPU 数量 70% 的时候,就应该分析排查负载高的问题了。

下面用 stress 命令模拟一个 CPU 压力的场景,先安装 stress :

sudo apt install stress

stress --cpu 1 --timeout 600

--cpu 1是产生 1 个进程不停的计算随机数的平方根, --timeout 600 是在 600 秒之后结束。

在另一个终端查看 uptime 输出,平均负载很快就接近 1 了。

$ uptime

13:07:39 up 2 days, 10:45, 2 users, load average: 0.01, 0.01, 0.00

$ uptime

13:10:49 up 2 days, 10:48, 2 users, load average: 0.94, 0.40, 0.15

$ uptime

13:12:33 up 2 days, 10:50, 2 users, load average: 0.99, 0.58, 0.25

或者用 watch -d -n 1 uptime 可以自动刷新,也可以观测到平均负载在变高。

-d 表示变化的部分可以高亮显示,

-n 是刷新间隔,这里选每 1 秒刷新,

用 mpstat 也可以观察到,%usr 在升高:

$ mpstat

Linux 4.15.0-117-generic (uu) 09/14/2020 _x86_64_ (1 CPU)

01:09:57 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

01:09:57 PM all 0.27 0.01 0.34 0.09 0.00 0.01 0.00 0.00 0.00 99.28

$ mpstat

Linux 4.15.0-117-generic (uu) 09/14/2020 _x86_64_ (1 CPU)

01:13:44 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

01:13:44 PM all 0.38 0.01 0.34 0.09 0.00 0.01 0.00 0.00 0.00 99.17

$ mpstat

Linux 4.15.0-117-generic (uu) 09/14/2020 _x86_64_ (1 CPU)

01:14:54 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

01:14:54 PM all 0.42 0.01 0.34 0.09 0.00 0.01 0.00 0.00 0.00 99.14

用 pidstat 可以查看具体哪个进程的 %usr 在变高。

3、上下文切换

$ vmstat

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 268 550080 108920 1077896 0 0 1677 26 86 127 1 1 99 0 0

指标含义:

cs(context switch)是每秒 上下文切换的次数。

r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。

in(interrupt)则是每秒 中断的次数,可以从 /proc/interrupts 文件中读取。

pidstat -w -t

指标含义:

cswch 表示每秒自愿上下文切换(voluntary context switches)的次数,比如 I/O、内存 等资源不足时,就会发生自愿上下文切换。

nvcswch 表示每秒非自愿上下文切换(non voluntary context switches)的次数。比如大量进程在争抢 CPU。

sudo apt install -y sysbench

下面用 sysbench 做实验,模拟系统多线程调度,--threads=2是 2 个线程,--max-time=60是运行60秒的基准测试:

sysbench --threads=2 --max-time=60 threads run

可以看到 vmstat 的 cs 升高了:

$ vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

12 0 268 470996 110748 1154896 0 0 1669 26 86 128 1 1 99 0 0

$ vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

6 0 268 469180 110756 1155052 0 0 1669 26 86 196 1 1 99 0 0

再用 pidstat -w -t 可以看到具体是 __sysbench 线程的上下文切换比较多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值