Linux-性能分析常用工具
创始人
2024-04-17 06:33:12
0

stress

stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。

stress --cpu 1 --timeout 600  # 拟一个 CPU 使用率 100% 的场景
stress -i 1 --timeout 600   #模拟 I/O 压力,即不停地执行 sync
stress -c 8 --timeout 600  #模拟的是 8 个进程

sysstat

sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。

  • mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
# -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
$ mpstat -P ALL 5
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:30:06     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
13:30:11     all   50.05    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   49.95
13:30:11       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
13:30:11       1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
  • pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
# 每隔 1 秒输出 1 组数据(需要 Ctrl+C 才结束)
#-d 展示 I/O 统计数据,-p 指定进程号
# -w 参数表示输出进程切换指标,而 -u 参数则表示输出 CPU 使用指标  -t输出线程的上下文切换指标
$ pidstat -wt -u 1
08:06:33      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
08:06:34        0     10488   30.00  100.00    0.00    0.00  100.00     0  sysbench
08:06:34        0     26326    0.00    1.00    0.00    0.00    1.00     0  kworker/u4:208:06:33      UID       PID   cswch/s nvcswch/s  Command
08:06:34        0         8     11.00      0.00  rcu_sched
08:06:34        0        16      1.00      0.00  ksoftirqd/1
08:06:34        0       471      1.00      0.00  hv_balloon
08:06:34        0      1230      1.00      0.00  iscsid
08:06:34        0      4089      1.00      0.00  kworker/1:5
08:06:34        0      4333      1.00      0.00  kworker/0:3
08:06:34        0     10499      1.00    224.00  pidstat
08:06:34        0     26326    236.00      0.00  kworker/u4:2
08:06:34     1000     26784    223.00      0.00  sshd

用户态 CPU 使用率 (%usr);
内核态 CPU 使用率(%system);
运行虚拟机 CPU 使用率(%guest);
等待 CPU 使用率(%wait);
以及总的 CPU 使用率(%CPU)。

sysbench

sysbench 是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况。

# 以 10 个线程运行 5 分钟的基准测试,模拟多线程切换的问题
sysbench --threads=10 --max-time=300 threads run

top

top 显示了系统总体的 CPU 和内存使用情况,以及各个进程的资源使用情况。

# 默认每 3 秒刷新一次
$ top
top - 11:58:59 up 9 days, 22:47,  1 user,  load average: 0.03, 0.02, 0.00
Tasks: 123 total,   1 running,  72 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8169348 total,  5606884 free,   334640 used,  2227824 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  7497908 avail MemPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND1 root      20   0   78088   9288   6696 S   0.0  0.1   0:16.83 systemd2 root      20   0       0      0      0 S   0.0  0.0   0:00.05 kthreadd4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H
...

user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。

nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
system(通常缩写为 sys),代表内核态 CPU 时间。
idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
guest(通常缩写为 guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间。
guest_nice(通常缩写为 gnice),代表以低优先级运行虚拟机的时间。

进程都有一个 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的 CPU。

perf

perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。

$ perf top
Samples: 833  of event 'cpu-clock', Event count (approx.): 97742399
Overhead  Shared Object       Symbol7.28%  perf                [.] 0x00000000001f78a44.72%  [kernel]            [k] vsnprintf4.32%  [kernel]            [k] module_get_kallsym3.65%  [kernel]            [k] _raw_spin_unlock_irqrestore
...#离线采集分析   -g 参数,开启调用关系的采样
perf record -g # 按 Ctrl+C 终止采样
perf report # 展示类似于 perf top 的报告

第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中,perf 总共采集了 833 个 CPU 时钟事件,而总事件数则为 97742399。

第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

ab

ab(apache bench)是一个常用的 HTTP 服务性能测试工具,用来模拟 Ngnix 的客户端。

# 并发 10 个请求测试 Nginx 性能,总共测试 100 个请求
$ ab -c 10 -n 100 http://192.168.0.10:10000/
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, 
...
Requests per second:    11.63 [#/sec] (mean)
Time per request:       859.942 [ms] (mean)
...//并发请求数改成 5,同时把请求时长设置为 10 分钟
ab -c 5 -t 600 http://192.168.0.10:10000/

dstat

dstat ,可以同时查看 CPU 和 I/O 这两种资源的使用情况。

# 间隔 1 秒输出 10 组数据
$ dstat 1 10
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw0   0  96   4   0|1219k  408k|   0     0 |   0     0 |  42   8850   0   2  98   0|  34M    0 | 198B  790B|   0     0 |  42   1380   0   0 100   0|  34M    0 |  66B  342B|   0     0 |  42   1350   0  84  16   0|5633k    0 |  66B  342B|   0     0 |  52   1770   3  39  58   0|  22M    0 |  66B  342B|   0     0 |  43   1440   0   0 100   0|  34M    0 | 200B  450B|   0     0 |  46   1470   0   2  98   0|  34M    0 |  66B  342B|   0     0 |  45   1340   0   0 100   0|  34M    0 |  66B  342B|   0     0 |  39   1310   0  83  17   0|5633k    0 |  66B  342B|   0     0 |  46   1680   3  39  59   0|  22M    0 |  66B  342B|   0     0 |  37   134

strace

strace 正是最常用的跟踪进程系统调用的工具。

$ strace -p 6082
strace: attach: ptrace(PTRACE_SEIZE, 6082): Operation not permitted

pstree

# -a 表示输出命令行选项
# p 表 PID
# s 表示指定进程的父进程
$ pstree -aps 3084
systemd,1└─dockerd,15006 -H fd://└─docker-containe,15024 --config /var/run/docker/containerd/containerd.toml└─docker-containe,3991 -namespace moby -workdir...└─app,4009└─(app,3084)

相关内容

热门资讯

“一站式”逛展 买全球好物 第六届西洽会现场,嘉宾在现场品尝美食。 第六届西洽会现场,市民在汽车展区了解重庆造新能源货车。...
看“她力量”如何重塑产业数字化... 转自:新安晚报  在数字经济蓬勃发展的新时代,安徽移动的一批女性科技工作者正以创新为笔、技术为墨,在...
两部门将加强私募基金犯罪管理 转自:北京商报司法保障资本市场改革发展迎来纲领性文件。5月15日,最高人民法院、中国证监会联合发布《...
观点直击 | 回稳市场下 贝壳... 观点网 今年3月,在贝壳2024年度业绩电话会上,管理层首次分享了公司在AI上的整体布局和思考。两个...
央行等部门拟进一步丰富“互换通... 转自:证券日报延长合约期限,扩充产品谱系    本报讯 (记者刘琪)5月15日,中国人民银行发布消息...
丹麦考虑发展核电 转自:新安晚报   丹麦气候、能源和公用事业大臣拉尔斯·奥高5月13日表示,丹麦政府正在考虑解除维持...
政策助力融资回暖 房企单月募资... 转自:北京商报随着政策支持力度持续加大,房地产行业融资环境呈现边际改善。北京商报记者梳理发现,近一个...
自我救赎与成长 ——读《追风筝... 寒假里被《追风筝的人》深深地迷住了。作者用朴实却充满力量的文字,指引着我跟随主人公阿米尔的脚步,走进...
以学习促提升 共建绿色家园 转自:新安晚报  为积极响应第三届全国城市生活垃圾分类宣传周活动,进一步提升基层垃圾分类工作者的专业...
姑溪河当涂闸枢纽工程建设按下“... 星报讯 连日来,马鞍山市当涂县姑溪河畔机器轰鸣、塔吊林立。在姑溪河当涂闸枢纽工程的施工现场,数百名...
阳光驿站:彩票公益金点亮乡村儿... 玻璃杯中变幻的化学实验液面折射出孩子们惊喜的眼神,沾满泥土的小手在菜园里播下春天的种子。这些温暖而动...
业绩继续下滑 安德玛重组计划效... 转自:北京商报安德玛的业绩还在下滑。5月14日,安德玛发布2025财年业绩报告显示,公司营收下降9%...
河北启动“民法典宣传月”集中示... 转自:千龙网河北省司法厅、省国资委今天在河北钢铁集团研发中心共同举办“典亮国企·法赋新程”活动暨河北...
125%→10%,24%税率暂... 5月14日12时01分起,我国对原产于美国的进口商品加征关税调整措施开始实施。有关事项如下:一、调整...
合肥市建平实验小学卧云校区举办... 为了进一步提高教育教学质量,提升家校共育水平,合肥市建平实验小学卧云校区于2025年5月14日举办了...
调研速递|[上市公司名称]接受... 5月15日,[上市公司名称]举行业绩说明会,吸引了参加深圳证券交易所“机巧灵动・赋能新制造”主题集体...
万科再获大股东支持 深铁集团提... 万科企业股份有限公司(以下简称“万科”)再获大股东借款支持。5月15日,万科披露称,深圳市地铁集团有...
研究部署改革开放、风险防控等工...   本报讯 5月15日,省委深改委暨自贸港工委会议召开,研究部署海南自由贸易港重点改革举措落实、扩大...
美国最高法院警惕特朗普限制公民... 转自:财联社【美国最高法院警惕特朗普限制公民身份政策的生效】财联社5月16日电,美国最高法院表示,它...
2025年服贸会9月10日启幕 转自:北京商报今年起,服贸会将固定于每年9月第二个星期的星期三开幕;举办地点调整为在首钢园区“一址举...