✏️ update

This commit is contained in:
nick
2020-01-21 11:26:58 +08:00
parent 370cd588bc
commit b0367180db
5 changed files with 45 additions and 373 deletions

View File

@ -4,9 +4,9 @@ CPU 使用率是单位时间内 CPU 使用情况的统计,以百分比的方
## 怎么查看 CPU 使用率
top 和 ps 是最常用的性能分析工具:top 显示了系统总体的 CPU 和内存使用情况以及各个进程的资源使用情况。ps 则只显示了每个进程的资源使用情况。
top 和 ps 是最常用的性能分析工具top 显示了系统总体的 CPU 和内存使用情况以及各个进程的资源使用情况。ps 则只显示了每个进程的资源使用情况。
top 默认每 3 秒刷新一次,输出格式为:
top 默认每 3 秒刷新一次,输出格式为
```
top - 21:12:50 up 21 days, 23:13, 2 users, load average: 0.05, 0.04, 0.01
@ -36,17 +36,17 @@ KiB Swap: 0 total, 0 free, 0 used. 3576656 avail Mem
top 并没有细分进程的用户态 CPU 和内核态 CPU需要查看每个进程的详细情况可以用 pidstat ,它正是一个专门分析每个进程 CPU 使用情况的工具。
下面的 pidstat 命令,就间隔 1 秒展示了进程的 5 组 CPU 使用率,包括:
下面的 pidstat 命令,就间隔 1 秒展示了进程的 5 组 CPU 使用率,包括
- 用户态 CPU 使用率 (%usr)
- 用户态 CPU 使用率%usr
- 内核态 CPU 使用率(%system)
- 内核态 CPU 使用率%system
- 运行虚拟机 CPU 使用率(%guest)
- 运行虚拟机 CPU 使用率%guest
- 等待 CPU 使用率(%wait)
- 等待 CPU 使用率%wait
- 以及总的 CPU 使用率(%CPU)
- 以及总的 CPU 使用率%CPU
最后的 Average 部分,还计算了 5 组数据的平均值。
@ -78,13 +78,13 @@ Average: 113 4606 0.20 0.20 0.00 0.40 - beam.smp
## CPU 使用率过高怎么办
通过 top、ps、pidstat 等工具,你能够轻松找到 CPU 使用率较高(比如 100% )的进程,如果需要排查占用 CPU 的到底是代码里的哪个函数,推荐使用 perf。perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。
通过 top、ps、pidstat 等工具,你能够轻松找到 CPU 使用率较高比如 100% 的进程,如果需要排查占用 CPU 的到底是代码里的哪个函数,推荐使用 perf。perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。
perf 分析 CPU 性能问题,两种最常见用法
__第一种__
perf top类似于 top它能够实时显示占用 CPU 时钟最多的函数或 者指令,因此可以用来查找热点函数,使用界面如下所示:
perf top类似于 top它能够实时显示占用 CPU 时钟最多的函数或 者指令,因此可以用来查找热点函数,使用界面如下所示
```
sudo perf top
@ -110,15 +110,15 @@ Overhead Shared Object Symbol
1.46% perf [.] 0x000000000008e326
```
输出结果中,第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中perf 总共采集了 674 个 CPU 时间事件,而总事件数则为 149937500
输出结果中,第一行包含三个数据,分别是采样数Samples、事件类型event和事件总数量Event count。比如这个例子中perf 总共采集了 674 个 CPU 时间事件,而总事件数则为 149937500
另外,采样数需要我们特别注意。如果采样数过少(比如只有十几个),那下面的排序和 百分比就没什么实际参考价值了。
另外,采样数需要我们特别注意。如果采样数过少比如只有十几个,那下面的排序和 百分比就没什么实际参考价值了。
再往下看是一个表格式样的数据,每一行包含四列,分别是:
再往下看是一个表格式样的数据,每一行包含四列,分别是
- 第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
- 第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
- 第二列 Shared ,是该函数或指令所在的动态共享对象Dynamic Shared Object,如内核、进程名、动态链接库名、内核模块名等。
- 第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
@ -126,7 +126,7 @@ Overhead Shared Object Symbol
__第二种__
就是 perf record 和 perf report。 perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。 而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。
就是 perf record 和 perf report。perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。
```
sudo perf record -a #按 Ctrl+C 终止采样