Linux Perf

news2024/10/7 8:27:11

文章目录

    • 一、简介
    • 二、使用方法
      • 1、子命令
      • 2、Tips
    • 三、perf-list
      • 1、事件类型
      • 2、事件修饰符
    • 四、perf-top
      • 1、输出结果
      • 2、选项
      • 3、交互命令
      • 4、示例
    • 五、perf-stat
      • 1、选项
      • 2、示例
    • 六、perf-record
      • 1、选项
      • 2、示例
    • 七、perf-report
      • 1、选项
      • 2、示例
    • 八、perf-script
      • 1、选项
      • 2、示例
      • 3、火焰图

一、简介

  perf (Performance analysis tools for Linux),是Linux官方的性能分析器(profiling),存在于内核源码目录tools/perf中。可以用于分析系统调用、硬件事件、软件事件、CPU使用情况、内存使用情况、锁等信息,从而帮助定位系统性能问题。

  perf原名为Linux性能计数器(Performance Counters for Linux,PCL),现名为Linux性能事件(Linux Performance Events,LPE)。它提供了一整套剖析和跟踪的工具,每个工具分别作为一个子命令,与git类似。

  通过它,应用程序可以利用 PMU(Performance Monitoring Unit,CPU上集成的性能监视单元。它可以对CPU执行的各种事件进行计数,如CPU周期、缓存命中/失误、分支预测正确/错误等)、tracepoint 和内核中的特殊计数器来进行性能统计。tracepoint是Linux内核中的一种跟踪机制。它允许在内核源代码的关键位置插入跟踪点,当内核执行到这些位置时,会调用注册在跟踪点上的跟踪函数(勾子,hook)来进行事件跟踪或数据采集。这一特定能够被各类trace/debug工具所使用。perf将tracepoint产生的时间记录下来,生成报告,从而了解程序的性能瓶颈在哪里。这些tracepint的对应的sysfs节点在/sys/kernel/debug/tracing/events目录下。

源码目录:

在这里插入图片描述

二、使用方法

perf [--version] [--help] [OPTIONS] COMMAND [ARGS]
# List available perf options.
--help         ## 帮助
--version      ## 版本
--exec-path    ## 设置执行路径
--html-path    ## 显示帮助文档路径
--paginate     ## 显示标页数
--no-pager     ## 不显示标页数
--debugfs-dir  ## 设置调试目录,PERF_DEBUGFS_DIR
--buildid-dir  ## 设置buildid缓存目录
--list-cmds    ## 显示所有子命令
--list-opts    ## 显示所有选项
--debug        ## 设置调试参数

# 实践版本
[root@192 ~]# perf --version
perf version 4.18.0-348.7.1.el8_5.x86_64

# 显示子命令的帮助信息
perf list --help

1、子命令

Notic:不同的版本命令、选项存在差异,具体请参考man文档。

子命令描述
annotate读取pert.data(由perf record创建) 并显示注释过的代码
archive根据数据文件中记录的buildid,将所有被采样到的DSO文件打成压缩包,供其它机器分析采样数据
bench基准测试的通用框架
buildid-cache管理perf的buildid缓存。每个ELF都有唯一的buildid表示,perf用buildid来关联符号与性能数据
buildid-list列出数据文件中记录的所有buildid
c2cShared Data C2C/HITM Analyzer
config读、写配置文件
daemon在后台运行录制任务
dataData file related processing
diff读取两个pert.data文件并显示两份剖析信息之间的差异
evlist列出一个per.data文件里的事件名称
ftracesimple wrapper for kernel’s ftrace functionality
inject过滤以加强事件流,在其中加人额外的信息
kallsymsSearches running kernel for symbols
kmem跟踪/测量内核内存 (slab)属性的工具
kvm跟踪/测量kvm客户机操作系统的工具
list列出所有的符号事件类型
lock分析锁事件
mem分析内存访问
record运行一个命令,并把剖析信息记录在per.data
report读取per.data并显示部析信息
sched跟踪/测量调度器属性(延时)的工具
script读取per.data并显示跟踪输出
stat运行一个命令并收集性能计数器统计信息
test运行完整性测试,提供多个测试用例
timechart可视化某一个负载期间系统总体性能的工具
top系统剖析工具,类似于linux top
version显示perf版本
probe定义新的动态跟踪点
tracestrace启发工具,能打印程序运行中各系统调用的耗时,如(perf trace ls)

2、Tips

[root@192 perf]# cat ~/share/doc/perf-tip/tips.txt
For a higher level overview, try: perf report --sort comm,dso
Sample related events with: perf record -e '{cycles,instructions}:S'
Compare performance results with: perf diff [<old file> <new file>]
Boolean options have negative forms, e.g.: perf report --no-children
Customize output of perf script with: perf script -F event,ip,sym
Generate a script for your data: perf script -g <lang>
Save output of perf stat using: perf stat record <target workload>
Create an archive with symtabs to analyse on other machine: perf archive
Search options using a keyword: perf report -h <keyword>
Use parent filter to see specific call path: perf report -p <regex>
List events using substring match: perf list <keyword>
To see list of saved events and attributes: perf evlist -v
Use --symfs <dir> if your symbol files are in non-standard locations
To see callchains in a more compact form: perf report -g folded
Show individual samples with: perf script
Limit to show entries above 5% only: perf report --percent-limit 5
Profiling branch (mis)predictions with: perf record -b / perf report
Treat branches as callchains: perf report --branch-history
To count events in every 1000 msec: perf stat -I 1000
Print event counts in CSV format with: perf stat -x,
If you have debuginfo enabled, try: perf report -s sym,srcline
For memory address profiling, try: perf mem record / perf mem report
For tracepoint events, try: perf report -s trace_fields
To record callchains for each sample: perf record -g
To record every process run by a user: perf record -u <user>
Skip collecting build-id when recording: perf record -B
To change sampling frequency to 100 Hz: perf record -F 100
See assembly instructions with percentage: perf annotate <symbol>
If you prefer Intel style assembly, try: perf annotate -M intel
For hierarchical output, try: perf report --hierarchy
Order by the overhead of source file name and line number: perf report -s srcline
System-wide collection from all CPUs: perf record -a
Show current config key-value pairs: perf config --list
Show user configuration overrides: perf config --user --list
To add Node.js USDT(User-Level Statically Defined Tracing): perf buildid-cache --add `which node`
To report cacheline events from previous recording: perf c2c report

三、perf-list

perf list命令用于列出系统上可用的跟踪事件,所有的符号事件类型,主要关注这三种:
  Hardware Event是由PMU硬件产生的事件,比如cache命中,分支预判等;
  Software Event是内核软件产生的事件,比如进程切换,tick 数等 ;
  Tracepoint event是内核中的静态tracepoint所触发的事件,用来判断程序运行期间内核的行为细节,比如slab分配器的分配次数,系统调用,TCP事件,文件系统IO事件,块设备事件等。

1、事件类型

perf list默认会输出所有支持的事件,被划分成多个类型,可能会重复。划分的类型有:

[root@192 ch]# man perf-list
Without options all known events will be listed.

To limit the list use:
 1. hw or hardware to list hardware events such as cache-misses, etc.
 2. sw or software to list software events such as context switches, etc.
 3. cache or hwcache to list hardware cache events such as L1-dcache-loads, etc.
 4. tracepoint to list all tracepoint events, alternatively use
    subsys_glob:event_glob to filter by tracepoint subsystems such as sched,
    block, etc.
 5. pmu to print the kernel supplied PMU events.
 6. sdt to list all Statically Defined Tracepoint events.
 7. metric to list metrics
 8. metricgroup to list metricgroups with metrics.
 9. If none of the above is matched, it will apply the supplied glob to all
    events, printing the ones that match.
10. As a last resort, it will do a substring search in all event names.

One or more types can be used at the same time, listing the events for the types
specified.

Support raw format:
 1. --raw-dump, shows the raw-dump of all the events.
 2. --raw-dump [hw|sw|cache|tracepoint|pmu|event_glob], shows the raw-dump of a
    certain kind of events.

可以只显示关心的事件类型:

[root@192 ch]# perf list software

List of pre-defined events (to be used in -e):

  alignment-faults                                   [Software event]
  bpf-output                                         [Software event]
  context-switches OR cs                             [Software event]
  cpu-clock                                          [Software event]
  cpu-migrations OR migrations                       [Software event]
  dummy                                              [Software event]
  emulation-faults                                   [Software event]
  major-faults                                       [Software event]
  minor-faults                                       [Software event]
  page-faults OR faults                              [Software event]
  task-clock                                         [Software event]

[root@192 ch]# perf list hardware

List of pre-defined events (to be used in -e):

  branch-instructions OR branches                    [Hardware event]
  branch-misses                                      [Hardware event]
  bus-cycles                                         [Hardware event]
  cache-misses                                       [Hardware event]
  cache-references                                   [Hardware event]
  cpu-cycles OR cycles                               [Hardware event]
  instructions                                       [Hardware event]
  ref-cycles                                         [Hardware event]

[root@192 ch]# perf list cache

list of pre-defined events (to be used in -e):

 L1-dcache-load-misses                              [Hardware cache event]
 L1-dcache-loads                                    [Hardware cache event]
 L1-dcache-stores                                   [Hardware cache event]
 L1-icache-load-misses                              [Hardware cache event]
 LLC-load-misses                                    [Hardware cache event]
 LLC-loads                                          [Hardware cache event]
 LLC-store-misses                                   [Hardware cache event]
 LLC-stores                                         [Hardware cache event]
 branch-load-misses                                 [Hardware cache event]
 branch-loads                                       [Hardware cache event]
 dTLB-load-misses                                   [Hardware cache event]
 dTLB-loads                                         [Hardware cache event]
 dTLB-store-misses                                  [Hardware cache event]
 dTLB-stores                                        [Hardware cache event]
 iTLB-load-misses                                   [Hardware cache event]
 iTLB-loads                                         [Hardware cache event]
 node-load-misses                                   [Hardware cache event]
 node-loads                                         [Hardware cache event]
 node-store-misses                                  [Hardware cache event]
 node-stores                                        [Hardware cache event]

2、事件修饰符

事件可以通过附加一个冒号和一个或多个修饰符来过滤。如果需要限制统计的事件,可以添加以下修饰符:

u - 用户空间统计
k - 内核空间统计
h - hypervisor counting, 虚拟化统计
I - 非空闲统计
G - guest counting (in KVM guests)
H - host counting (not in KVM guests)
p - 指定精度等级,p0、p1、p2、p3
P - 使用最大检测精度
S - 读取采样值 (PERF_SAMPLE_READ)
D - pin the event to the PMU
W - group is weak and will fallback to non-group if not schedulable
e - group or event are exclusive and do not share the PMU

四、perf-top

  perf top是系统剖析工具。对于一个指定的性能事件(默认的性能事件为cpu cycles,CPU周期),显示消耗最多的函数或指令。perf top类似linux的top命令,可以排列展示当机的函数和指令消耗情况。perf top主要用于实时分析各个函数在某个性能事件上的热度,能够快速的定位热点函数,包括应用程序函数、模块函数与内核函数,甚至能够定位到热点指令。

  perf top适合用于观测一直运行的服务程序或后台进程。

1、输出结果

第一列:符号引发的性能事件的比例,默认指占用的cpu周期比例。
第二列:符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块。
第三列:DSO的类型。
    [.] : user level 用户态空间,若自己监控的进程为用户态进程,那么这些即主要为用户态的cpu-clock占用的数值;
    [k]: kernel level 内核态空间;
    [g]: guest kernel level (virtualization) ;
    [u]: guest os user space;
    [H]: hypervisor;
第四列:符号名。有些符号不能解析为函数名,只能用地址表示。

在这里插入图片描述

2、选项

选项有很多,仅描述常用选项,其它选项可以通过man perf-top参考。

选项描述
-e <event>指明要分析的性能事件
-p <pid>仅分析目标进程及其创建的线程
-k <path>指定带符号表的内核映像所在的路径
-K不显示属于内核或模块的符号
-U不显示属于内核或模块的符号
-d <n>界面的刷新周期,默认为2s,因为perf top默认每2s从mmap的内存区域读取一次性能数据
-g得到函数的调用关系图
-s,–sort选择排序方式,如:–sort pid

3、交互命令

可在perf top显示界面直接输入交互命令。

命令功能
h | ? | F1显示帮助
q | ESC退出
UP/DOWN/PGUP/PGDN/SPACE导航
TAB/UNTAB切换事件,用于多事件会话
ENTER显示上下文菜单
d进入当前DSO,显示所有符号百分比
e扩展/收缩主调用链(需要配合-g选项使用)
E扩展所有调用链(需要配合-g选项使用)
F打开/关闭过滤条件(百分比大于xxx)
H显示列标题
k进入内核映射,显示所有内核函数百分比
L改变百分比限制
m显示上下文菜单
S进入当前CPU套接口
PPrint histograms to perf.hist.N
t进入当前线程
V显示详细信息(DSO names in callchains,etc)
z过滤0值(实际测试中还是有0值)
f启用/禁用事件
/按符号名过滤

4、示例

进入top界面后,按Enter查看当前DSO中各符号占比

在这里插入图片描述

五、perf-stat

  perf stat可以快速采集各种CPU与内核事件的计数器,并在执行结束时输出统计结果,用于分析负载类型与系统性能瓶颈。

  1. 支持各种事件统计,以及使用修饰符来过滤事件获取更精确的统计信息。
  2. 汇总输出:汇总输出各事件的总计数器值、平均值与百分比等统计数据。
  3. 多次统计:可以多次重复运行并汇总统计,方便比较不同测试情境下的系统性能差异。
  4. 采样间隔设置:可以设定计数器值汇总的时间间隔,默认为整个测试周期。
  7. 与其他工具配合:可以将汇总信息输出为文件,供其它工具进一步分析。

1、选项

选项描述
-e <event>指明要分析的性能事件,支持多个事件与修饰符,如:-e cycles:u,instructions:k
-r <n>重复运行n次,并多次结果的显示标准差
-C只统计特定的CPU
-p <pid>只统计特定的进程
-t <tid>只统计特定的线程
-I <ms>设置间隔,单位毫秒,多久打印一次统计信息
record将统计信息存储到文件perf.data,也可以指定输出文件名
report根据已储存的统计信息生成报告,默认输入文件为perf.data
–interval-clear每次间隔刷新时,清空屏幕,有点类似top

2、示例

# 将统计信息输出到perf.data
perf stat record ls

# 根据已储存的统计信息生成报告
perf stat report

统计执行5次ls命令结果,只查看用户空间的cycles和内核空间的instructions,输出平均值与标准差。

在这里插入图片描述

六、perf-record

  perf record可以针对指定的事件、CPU、tracepoint等进行采集,采集结束后生成perf.data用于后续解析、报告、储存等。

  1. 支持各种事件的采集以及事件过滤。
  2. 采样间隔控制:可以设置采样频率。采样频率越高,获得的跟踪数据越详细,但数据文件也越大。
  3. 多种输出:支持输出原始采样数据,以及经过处理的报告数据等多种格式,使报告更易于阅读。
  4. 支持查看函数调用关系:可以采集函数调用关系,用于构建完整的调用链信息。
  5. 与其他工具配合:输出的文件可以供perf report、perf annotate等工具进行数据分析、查看与报告生成。
   7. 多次perf record之后,当前路径下会有perf.dataperf.data.old两个文件,分别是本次和上次的记录,这个时候我们可以通过perf diff进行对比优化的结果。

1、选项

选项描述
-e <event>指明要分析的性能事件,支持多个事件与修饰符,如:-e cycles:u,instructions:k
-g捕获调用链图
-C只统计特定的CPU
-p <pid>只统计特定的进程
-t <tid>只统计特定的线程
-F指定采样频率,每秒采样多少次

2、示例

# 采样频率设置为100,并显示调用链
perf record -g -F 100 ls

七、perf-report

 解析perf record产生的数据,并给出分析结果。

1、选项

选项描述
-i <file>指定要分析的输入数据文件,默认为perf.data
-F <key…>指定显示的字段
-g显示调用链
-s <key…>指定排序字段
-T显示线程相关数据
-d <dso>指定要显示的dso
–no-children不显示子函数的占比

2、示例

# 查看关于某个库的占用率
perf report -g -d libmy.so

# Samples:采样个数
# Event count:系统总共发生的事件数
# Children:当前函数调用的子函数数的使用率
# Self:当前函数自身的使用率。
# Command: 命令名
# Symbol:符号名,其中[.]表示用户空间函数,[k]表示内核函数

如果一个函数同时具有self与children采样结果,这说明:

  1. 该函数自身也参与了采样,产生了自身的采样消耗;
  2. 该函数还调用了其他子函数,这些子函数同样参与了采样,从而产生了children采样结果。

children采样结果是当前函数及其调用链上所有子函数产生的综合采样消耗。而self仅代表当前函数自身的采样消耗。通过观察这两个采样项之间的差异,可以分析出某个函数自身的消耗占比,以及它调用的子函数的影响。这对了解系统中各个函数的资源消耗情况与优化潜力有很大帮助。例如,如果self采样结果远大于children采样结果,说明当前函数自身消耗较大,子函数的影响较小。这提示我们优化的重点应放在改进当前函数的效率上。反之,如果children采样结果远大于self采样结果,说明当前函数主要通过调用子函数来产生资源消耗。我们应重点分析它调用的关键子函数,查找子函数中的优化点。

在这里插入图片描述

八、perf-script

 perf工具中的脚本处理工具。它可以读取perf工具生成的采样数据文件,并根据用户提供的脚本来处理与分析这些数据,生成定制化的报告。

perf script [<options>]

# 运行脚本进行记录,输出文件用于报告
perf script [<options>] record <script> [<record-options>] <command>

# 运行脚本进行报告
perf script [<options>] report <script> [script-args]

# 运行脚本进行实时记录与报告,不产生磁盘文件
perf script [<options>] <script> <required-script-args> [<record-options>] <command>

# 运行脚本生成与top类似的报告
perf script [<options>] <top-script> [script-args]

# 列出可用的脚本
[root@192 ~]# perf script --list
List of available trace scripts:
  failed-syscalls [comm]               system-wide failed syscalls
  rw-by-file <comm>                    r/w activity for a program, by file
  rw-by-pid                            system-wide r/w activity
  rwtop [interval]                     system-wide r/w top
  wakeup-latency                       system-wide min/max/avg wakeup latency
  compaction-times [-h] [-u] [-p|-pv] [-t | [-m] [-fs] [-ms]] [pid|pid-range|comm-regex] display time taken by mm compaction
  event_analyzing_sample               analyze all perf samples
  export-to-postgresql [database name] [columns] [calls] export perf data to a postgresql database
  export-to-sqlite [database name] [columns] [calls] export perf data to a sqlite3 database
  failed-syscalls-by-pid [comm]        system-wide failed syscalls, by pid
  flamegraph                           create flame graphs
  futex-contention                     futext contention measurement
  intel-pt-events                      print Intel PT Power Events and PTWRITE
  mem-phys-addr                        resolve physical address samples
  net_dropmonitor                      display a table of dropped frames
  netdev-times [tx] [rx] [dev=] [debug] display a process of packet and processing time
  powerpc-hcalls
  sched-migration                      sched migration overview
  sctop [comm] [interval]              syscall top
  stackcollapse                        produce callgraphs in short form for scripting use
  syscall-counts-by-pid [comm]         system-wide syscall counts, by pid
  syscall-counts [comm]                system-wide syscall counts

1、选项

选项描述
-l列出可用的脚本
-s执行给定的分析脚本程序
-g, --gen-script生成脚本文件
-i, --input=指定输入文件
-d, --debug-mode调试模式
-F, --fields指定显示哪些字段
–pid=仅显示指定进程的事件

2、示例

# 查看ls执行调用的火焰图
[root@192 ch]# perf script record flamegraph ls
[root@192 ch]# perf script
perf 11619  4110.808946:          1 cycles:
        ffffffff8100b38b __intel_pmu_enable_all.constprop.28+0x4b (/lib/modules/4.19.220-klrt/build/vmlin>
        ffffffff8100b635 intel_tfa_pmu_enable_all+0x35 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff8100594a x86_pmu_enable+0x11a (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff8118d537 perf_pmu_enable.part.107+0x7 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff8118dc7e ctx_resched+0x8e (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff8119875c perf_event_exec+0x16c (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff812212f1 setup_new_exec+0xd1 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff81279d42 load_elf_binary+0x392 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff8121f0fd search_binary_handler+0x7d (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff81220ca3 __do_execve_file.isra.43+0x573 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff812210d9 __x64_sys_execve+0x39 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff810023c7 do_syscall_64+0x97 (/lib/modules/4.19.220-klrt/build/vmlinux)
        ffffffff81a0007d entry_SYSCALL_64+0x6d (/lib/modules/4.19.220-klrt/build/vmlinux)
            7f9be3b1c05b [unknown] ([unknown])
# ...     

3、火焰图

火焰图是一种常用于性能分析与可视化的图表。它以二维坐标轴显示采样数据,横轴表示时间,纵轴表示调用堆栈。通过火焰图可以直观地查看函数调用关系与时间轴上的资源消耗变化,发现性能瓶颈与优化点。

脚本下载地址:https://github.com/brendangregg/FlameGraph.git

生成步骤:

# 1、生成perf.data
perf record -g ls

# 2、使用perf script工具对perf.data进行解析
perf script -i perf.data &> perf.unfold

# 3、将perf.unfold中的符号进行折叠
./FlameGraph-master/stackcollapse.pl perf.unfold perf.folded

# 4、生成svg图
./FlameGraph-master/flamegraph.pl perf.folded > perf.svg


# 脚本运行失败?直接注释97行
Can't locate open.pm in @INC (you may need to install the open module) (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at FlameGraph-master/flamegraph.pl line 97.
BEGIN failed--compilation aborted at FlameGraph-master/flamegraph.pl line 97

在这里插入图片描述

TIPS

  1. 火焰图就是看顶层的哪个函数占据的宽度最大。只要有平顶(plateaus),就表示该函数可能存在性能问题。
  2. 火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。
  3. 在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。点击左上角Reset Zoom`图片就会复原。
  4. 按下Ctrl+F会显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot(一)使用itelliJ社区版创建SpringBoot项目

工欲善其事&#xff0c;必先利其器。目前市面上有很多优秀的开发工具&#xff0c;例如 IntelliJ IDEA、Visual Studio Code 和 Eclipse 等&#xff0c;那么我们该如何选择呢&#xff1f;最好的选择是使用IntelliJ IDEA的Ultimate版本&#xff0c;但Ultimate版本试用期只有30天&…

【JavaWeb基础】RestController的使用

一、学习笔记 RestControllerControllerResponseBody 其中&#xff0c;ResponseBody将方法返回值直接响应&#xff0c;如果返回值类型是实体对象/集合&#xff0c;将会转换为Json格式响应。 二、代码展示 创建两个类 代码如下&#xff1a; package com.example.controller…

高效视频解码,使用MediaCodec解析H.265

MediaCodec是什么 MediaCodec是Android平台上的一个类&#xff0c;用于实现多媒体数据的编解码操作。它提供了对底层硬件编解码器的访问和控制&#xff0c;可以实现高效的音视频编解码处理&#xff0c;包括解码和编码功能。 通过使用MediaCodec&#xff0c;开发人员可以利用硬…

在多台服务器上运行相同命令

文章目录 PSSH安装使用(1)、定义一个文件&#xff0c;写入需要操作的机器&#xff0c;如pssh-hosts(2)、pssh执行命令(3)、参数含义(4)、pscp从96.54拷贝文件到其他机器(5)、pslurp从其它机器下载文件到本地(6)、pnuke 杀死远程主机上的进程 ansible安装使用(1)、安装完后&…

兼容性测试如何提高网站的性能?

随着互联网的持续发展&#xff0c;越来越多的公司和组织都开始关注网站的性能问题。一个高效的网站不仅可以提高用户满意度&#xff0c;促进业务的发展&#xff0c;还可以提高搜索引擎的排名&#xff0c;为公司带来更多的流量和收益。而兼容性测试是提高网站性能的关键之一&…

SECS协议学习

1.SECS介绍 SEMI(国际半导体协会&#xff09;为了方便工厂系统与设备沟通而建立的一种通信标准 2.SECS常用功能 2.1.设备向工厂系统报告设备状态&#xff08;自动、暂停、初始化、报警&#xff0c;特殊事件&#xff1a;如门开启等&#xff09; 2.2.远程控制设备&#xff0…

实录分享 | Alluxio Operator一体化部署方案

今天给大家分享的内容是 Alluxio Operator的一体化部署方案。我会将内容分成 4 个部分来给大家讲解。 首先&#xff0c;介绍 Kubernetes 容器化部署和当前所面临的挑战。 然后&#xff0c;引入operator的概念&#xff0c;介绍当前业界关于Kubernetes 容器化部署问题的主流解决…

好用的web可视化报表工具

随着数字化程度加深&#xff0c;数据可视化成为数据分析中不可或缺的重要组成部分&#xff0c;可视化图表能非常直观地为管理者和决策者提供有效的企业信息&#xff0c;因此找到一款好用的数据可视化工具尤为重要&#xff01; 中国式报表设计 报表可视化操作界面&#xff0c;…

Docker容器日志管理详解

1. 简介 Docker容器日志是指容器在运行过程中产生的各种日志信息&#xff0c;包括错误、警告、信息等。Docker将所有容器的日志统一管理&#xff0c;方便用户对容器进行监控、故障排查和性能分析。 1.1 什么是Docker容器日志 Docker容器日志是容器在运行过程中产生的各种日志…

推荐5款非常小巧精致的免费软件

今天继续分享5个超实用的小工具&#xff0c;都是非常小巧精致的免费软件。 开源三维建模——Blender ​ Blender是一个开源的三维建模和动画软件&#xff0c;可以用于制作游戏、电影、广告等。它拥有丰富的建模、雕刻、纹理、渲染、动力学、模拟等功能&#xff0c;以及内置的…

Sequential用法

目录 1.官方文档解释 1.1原文参照 1.2中文解释 2.参考代码 3.一些参考使用 3.1生成网络 3.2 感知机的实现 3.3组装网络层 1.官方文档解释 1.1原文参照 A sequential container. Modules will be added to it in the order they are passed in the constructor. A…

数据治理的关键能力是什么?如何发力?

工业时代历经百年形成的全球经济体系、治理体系&#xff0c;在突如其来的新冠疫情冲击和数字技术高速发展下&#xff0c;开始加速变革。从社会经济系统来看&#xff0c;未来人类社会将向“实体数字”的二维空间发展。数字经济将是基于这个二维空间而建立的新经济模式&#xff0…

做好新媒体宣传的工作总结

新媒体宣传工作总结1 不得不说时间过的真快&#xff0c;自己在_公司_部工作已有两多月了。这段时间是我人生的一个重大转折点&#xff0c;一个在校生成为一名社会人员的转型期&#xff0c;在这期间我失去了&#xff0c;也收获了&#xff0c;更多的是我成长了。 走出校园我还懵懵…

一文彻底教你如何mysql8驱动 jdbc下载

这里以mysql-connector-java-8.0.29.jar为例 打开MySQL官网&#xff0c;点击DOWNLOADS&#xff0c;如下图 进入页面后&#xff0c;滚动到下方&#xff0c;点击 MySQL Community (GPL) Downloads 进入后&#xff0c;点击Connector/J 选择项 这里选择的是zip包&#xff0c…

OpenMMLab OpenMMLab mmdeploy v1.1.0模型部署(一)

一、MMDepoly整体框架 模型部署是指把机器学习训练生成的算法模型&#xff0c;部署到各类云、边、端设备上去&#xff0c; 并使之高效运行&#xff0c;从而将算法模型实际地应用到现实生活中的各类任务中去&#xff0c;从而实现AI的智能化转型。 目前&#xff0c;我们已经支持…

windows下进行c++开发环境的搭建以及使用cmake跨平台工具进行c++代码的开发

windows下使用cmake进行c程序的开发 要求环境条件简单使用cmake 要求环境条件 安装mingw64并配置环境变量 检查命令 gcc - v安装cmake并配置环境变量 检查命令 cmake – version安装vscode安装vscode开发插件&#xff0c;cextension pack(这是一系列整合包) tips: 腾讯微云min…

el-popover修改宽度

popper-class可以修改其样式。 写法&#xff1a; <el-popover v-if"showNav false" popper-class"el-popover-self"><template #reference><el-icon class"recorder_open"><DArrowLeft style"color: #ffb814"/&…

23年测试前景?测试开发?开发测试框架你懂多少?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 基本概念 库&…

接口文档这几点我们一定要注意

我们在做开发的时候&#xff0c;经常需要输出接口文档&#xff0c;我们的接口文档&#xff0c;如果输出的有问题&#xff0c;首先给别人的感觉就是觉得你不专业&#xff0c;另外好的接口文档&#xff0c;给了他人以后&#xff0c;就完全可以按照你接口文档去做对接&#xff0c;…

【vue】项目开发常见问题目录

问题目录&#xff08;持续更新&#xff01;&#xff09; 0&#xff0c;页面初始化1&#xff0c; v-if 与 v-for 同时使用报错的问题2&#xff0c; 页面传参注意事项3&#xff0c; Vue路由this.$router.push转跳同一个页面不刷新4&#xff0c;NavigationDuplicated: Avoided red…