最新资讯

  • 理解并使用Linux下的perf性能分析工具

理解并使用Linux下的perf性能分析工具

2025-05-16 07:37:42 1 阅读

理解并使用Linux下的perf性能分析工具

1. 什么是perf

1.1 perf简介:Linux性能分析的利器

perf(Performance Analysis Tools for Linux)是Linux内核自带的性能分析工具,广泛用于监控系统性能、分析程序瓶颈和优化。它不仅能捕获硬件事件(如CPU周期、缓存命中/未命中),还能帮助开发者定位性能热点,支持用户态和内核态的全面分析。perf是进行精细化性能分析的必备工具,适合开发者深入了解系统性能。

1.2 工作原理:从硬件事件到用户态的报告

perf通过访问Linux内核中的性能监控单元(PMU),采样和计数硬件事件。PMU专门用于监控硬件性能,perf通过这些单元收集数据并分析性能。其基本流程如下:

1.2.1 硬件事件与PMU

PMU捕捉的硬件事件包括指令执行、缓存命中/未命中、分支预测等,perf基于这些数据帮助开发者深入分析程序的硬件表现。

1.2.2 采样与统计
  • 采样(Sampling):定期记录程序状态,适合长期运行任务的性能分析。
  • 统计(Counting):精确记录事件发生次数,适合短时任务的性能分析。
1.2.3 数据收集与处理
  1. 事件配置:通过命令指定监控事件。
  2. 数据采集:内核捕捉事件并通过环形缓冲区存储。
  3. 数据转发:数据从内核传输至用户态的perf工具。
  4. 结果展示perf分析数据并以清晰的方式展示结果。
1.2.4 软件事件与跟踪点

perf还支持监控软件事件(如上下文切换、页面错误),以及用户定义的跟踪点,增强了其分析能力。

1.2.5 数据收集与开销控制

为减小对系统性能的影响,perf使用高效的环形缓冲区和灵活的采样频率调整。用户可以通过-F参数调整采样频率,使用事件过滤器(如-e--pid)精准控制监控范围。

2. 快速上手perf

2.1 安装perf

不同Linux发行版的安装命令如下:

  • Debian/Ubuntusudo apt install linux-perf
  • Red Hat/CentOS/Fedorasudo yum install perfsudo dnf install perf
  • Arch Linuxsudo pacman -S perf

2.2 perf的基本用法:执行命令并查看性能数据

通过以下命令采集ls命令的性能数据:

perf stat ls

此命令会统计ls执行期间的CPU周期、指令数等基本性能数据。

2.3 常见的perf子命令

2.3.1 perf stat:性能数据总览

perf stat命令用于统计程序运行期间的性能事件:

perf stat -e cycles,instructions ./my_program

该命令统计my_program执行期间的CPU周期和指令数。

2.3.2 perf record:记录采样数据

perf record用于记录程序的性能数据并将其保存为perf.data文件:

perf record -F 99 ./my_program

其中-F 99表示以每秒99次频率进行采样。

2.3.3 perf report:分析采样数据

通过perf report命令,用户可以交互式查看性能热点:

perf report
2.3.4 perf annotate:源代码注释

perf annotate用于在源代码或反汇编代码中添加性能数据注释:

perf annotate -i perf.data

3. perf的参数详解

3.1 常用参数一览表

参数功能描述
-e指定监控的事件类型(如cyclesinstructions
-F设置采样频率,控制采样精度
-p限制监控特定进程
-t限制监控特定线程
-g收集调用堆栈信息
--call-graph启用调用图分析,显示调用堆栈
-a全系统监控模式
--cpu限制监控特定CPU核心
-o输出到指定文件
-i从指定文件读取数据进行分析

3.2 参数详解

3.2.1 指定事件:-e选项

通过-e指定要监控的事件类型:

perf stat -e cycles,instructions ./my_program

可以通过perf list查看支持的事件类型。

3.2.2 调整采样频率:-F

-F选项设置采样频率,例如:

perf record -F 99 ./my_program

此命令每秒采样99次,较高的频率带来更精细的数据,但也增加系统开销。

3.2.3 限制采样范围:用户态与内核态

使用-e:u:k组合,限定事件发生在用户态或内核态:

perf stat -e cycles:u,instructions:k ./my_program
  • :u:仅采样用户态事件
  • :k:仅采样内核态事件
3.2.4 收集调用堆栈:-g

通过-g选项收集程序的调用堆栈:

perf record -g ./my_program
3.2.5 输出格式化选项:报告输出格式

perf支持将报告输出为多种格式(如JSON、CSV):

perf report -o report.txt

4. 深入解析perf报告

4.1 查看perf report输出

perf reportperf工具中用于分析采样数据的命令之一,提供了交互式的报告视图,帮助用户更直观地识别性能瓶颈。运行perf record后生成的性能数据文件(默认为perf.data)会通过perf report展示出来。在报告中,perf会根据CPU周期或事件频次显示各个函数、代码块的性能数据,按消耗时间或事件的频次排序。

使用perf report时,常见的输出内容包括:

  • 函数调用热点:按占用CPU时间或硬件事件次数排序的函数列表。
  • 调用图:显示函数调用关系,帮助了解性能瓶颈是在哪个函数及其调用链中。
  • 执行路径:通过perf report,用户可以看到程序执行过程中各个函数的运行路径,理解程序的执行流程。

要查看perf report的基本输出,可以直接运行:

perf report

在交互式界面中,用户可以通过上下箭头查看不同的函数,按Enter键进入更深层次的调用堆栈。

4.2 分析函数调用热点

使用perf record -g选项时,perf report还可以显示函数的调用图,帮助更好地理解函数之间的调用关系。

例如:

# perf record -g ls
# perf report
输出解析
Samples: 9 of event 'cycles:P', Event count (approx.): 2805182
  • Samples: 9:表示在此次采样过程中共采集到 9 个样本。
  • Event ‘cycles:P’:这表示采样的是处理器周期事件(cycles)。这里的 P 表示这个事件是针对 CPU 的周期计数器进行采样的。
  • Event count (approx.): 2805182:表示此次采样期间的事件总数大约为 2805182 次。
结果表格解析
  Children      Self  Command  Shared Object         Symbol
+   54.96%    54.96%  ls       [kernel.kallsyms]     [k] clear_page_erms
+   54.96%     0.00%  ls       ld-linux-x86-64.so.2  [.] _dl_start_user
+   54.96%     0.00%  ls       ld-linux-x86-64.so.2  [.] _dl_start
+   54.96%     0.00%  ls       ld-linux-x86-64.so.2  [.] _dl_sysdep_start
+   54.96%     0.00%  ls       ld-linux-x86-64.so.2  [.] dl_main
+   54.96%     0.00%  ls       libc.so.6             [.] __x86_cacheinfo_ifunc
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] asm_exc_page_fault
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] exc_page_fault
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] do_user_addr_fault
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] handle_mm_fault
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] __handle_mm_fault
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] handle_pte_fault
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] do_anonymous_page
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] alloc_anon_folio
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] vma_alloc_folio
+   54.96%     0.00%  ls       [kernel.kallsyms]     [k] alloc_pages_mpol
  • Samples:每行开头的百分比(例如 54.96%)表示该符号(函数)所占样本的百分比。例如,clear_page_erms 函数占用了 54.96% 的 CPU 周期时间。

  • Children:第二列显示的 54.96%0.00% 等数字表示该函数本身和它的子函数分别消耗的 CPU 周期时间。Children 是指该函数调用的其他函数消耗的时间:

    • self:当前函数自身的 CPU 时间。
    • children:当前函数调用的其他函数消耗的时间。
  • Command:这是正在执行的命令,这里是 ls

  • Shared Object:显示执行该符号的共享对象(共享库)。例如:

    • [kernel.kallsyms]:表示这是内核代码中执行的函数。
    • ld-linux-x86-64.so.2libc.so.6:分别表示 ld-linuxlibc 共享库。
  • Symbol:是正在执行的具体符号(函数或内核地址),例如 clear_page_erms_dl_start_user__x86_cacheinfo_ifunc 等。

详细分析
  • 内核函数:许多条目显示的是 [kernel.kallsyms],这是因为很多 CPU 时间消耗是在内核空间内进行的,尤其是在处理页面故障(如 clear_page_ermsasm_exc_page_fault 等)。
  • 库函数:一些库函数(如 dl_main_dl_start_user)出现在了报告中,表明 ls 命令在执行过程中也调用了这些共享库中的函数,通常是在程序启动时进行初始化操作。
为什么会有很多相同的百分比(54.96%)?
  • 报告中的所有行都显示 54.96%,这表示所有函数采样的 CPU 时间大致相同。这通常是因为在进行性能采样时,许多函数在同一时间段内占用了相同数量的 CPU 周期。具体来说,报告中的函数很可能是在程序执行初期的某一时间点被采样,所有函数的执行时间非常接近。

4.3 堆栈跟踪与火焰图结合

堆栈跟踪在性能分析中是至关重要的,它能够帮助开发者识别程序运行时的调用路径,从而发现潜在的性能瓶颈。perf工具支持生成堆栈跟踪数据,并能与火焰图结合使用,提供更加直观和有效的性能分析。

火焰图介绍

火焰图(Flamegraph)是由Brendan Gregg发明的一种可视化性能数据的方法,旨在帮助开发者通过将函数调用堆栈以矩形图的形式进行可视化展示,从而快速识别占用大量CPU时间的函数及调用路径。每个矩形的宽度代表该函数在采样过程中所占用的CPU时间或事件频次,矩形越宽,表示该函数消耗的CPU资源越多,可能就是性能瓶颈所在。

火焰图的优势在于它能够将复杂的堆栈信息以直观的方式展现出来,使得开发者可以轻松地从多个调用层次中定位问题。它不仅对性能瓶颈的发现有帮助,还能帮助进行性能优化和回归测试。

使用perf生成火焰图

要生成火焰图,首先需要使用perf工具进行采样数据记录,并利用perf script将数据转化为适合火焰图工具的格式。具体步骤如下:

  1. 记录采样数据

    使用perf record命令记录程序运行时的堆栈数据。例如,下面的命令会以每秒99次的频率对整个系统进行采样,并生成包含调用堆栈数据的perf.data文件:

    perf record -F 99 -a -g -- sleep 30
    

    其中:

    • -F 99:每秒进行99次采样。
    • -a:全系统采样,包括内核和用户空间。
    • -g:记录调用堆栈信息。
    • sleep 30:运行程序(此处为模拟命令),你可以替换成你希望分析的应用程序。
  2. 将数据转换为火焰图格式

    使用perf scriptperf.data文件中的数据导出为文本格式,以便后续处理:

    perf script > out.perf
    

    这条命令会将perf.data中的采样数据转换为堆栈跟踪格式并保存为out.perf文件。

  3. 生成火焰图

    要生成火焰图,需要使用Flamegraph工具。假设你已经从GitHub下载并解压了Flamegraph工具包,可以通过以下命令将out.perf文件转换为火焰图:

    ./stackcollapse-perf.pl out.perf > out.folded
    ./flamegraph.pl out.folded > flamegraph.svg
    
    • stackcollapse-perf.pl:将堆栈跟踪信息折叠成单行,以便生成火焰图。
    • flamegraph.pl:生成火焰图SVG文件。

    生成的flamegraph.svg文件可以在浏览器中查看,火焰图中每个矩形的宽度表示函数调用消耗的CPU时间。通过火焰图,开发者可以迅速定位性能瓶颈。

火焰图的优点:
  • 直观性强:火焰图通过可视化的方式展示堆栈信息,使得性能瓶颈一目了然。矩形的宽度和颜色直观地反映了CPU时间的消耗,便于快速分析。
  • 多层次分析:火焰图支持查看函数调用堆栈的多层次结构,帮助开发者更深入地分析程序的性能瓶颈。通过查看不同调用层次的信息,开发者可以精确定位性能问题的根源。
  • 减少分析时间:火焰图使得开发者无需深入逐行分析代码,而是通过一眼识别出最可能导致性能瓶颈的部分,从而节省大量时间。通过火焰图,开发者可以在大量堆栈信息中迅速找到关键函数和代码路径。
注意事项:
  • 采样频率的选择:在生成火焰图时,选择合适的采样频率非常重要。过低的采样频率可能导致数据不够精确,遗漏关键的性能问题;而过高的采样频率则可能导致性能负担过重,影响程序运行本身。因此,通常根据程序的特性和需要调整采样频率。

  • 内存和CPU消耗:生成火焰图可能会消耗一定的内存和CPU资源,尤其是在分析大规模系统或复杂程序时,因此应适当调整采样范围和采样时间。

  • 适用范围:火焰图适用于CPU密集型的性能分析,对于I/O瓶颈或者内存分配问题等,火焰图的效果可能没有那么突出。因此,针对不同的性能问题,可以结合其他工具如perftrace功能或者valgrind来补充分析。

通过结合perf和火焰图,开发者能够更加高效地进行性能调优,快速定位程序中的瓶颈,并采取相应的优化措施。

5. 案例实战

5.1 案例1:优化计算密集型程序

计算密集型程序的性能瓶颈通常与CPU计算能力密切相关,perf可以帮助分析程序中最消耗CPU时间的函数,并指出优化的方向。以下是优化计算密集型程序的步骤:

步骤:
  1. 记录性能数据
    使用perf record命令记录程序的性能数据。针对计算密集型程序,建议增加-F参数以增加采样频率,捕获更多的数据。

    perf record -F 99   ./my_compute_program
    

    其中,-F 99表示每秒采样99次,-g表示启用调用图功能。

  2. 查看性能报告
    使用perf report查看报告,关注CPU时间消耗较大的函数。可以按函数名、调用关系、消耗时间等进行排序。

    perf report
    

    输出中会列出所有函数的CPU占用情况。例如:

      Overhead  Command  Shared Object       Symbol
      ......     .......  ............       ......
      1. 30%     my_program  libm.so.6        sin
      2. 20%     my_program  my_program        compute_heavy
      3. 10%     my_program  my_program        main
    

    其中,sin函数占用了45.30%的CPU时间,可能是由于某些计算中的三角函数调用过于频繁。

  3. 识别热点函数
    根据perf report的输出,sin函数是CPU时间的瓶颈。你可以考虑优化该函数的使用方式,例如,替代为更高效的数学库,或预计算常用值。

  4. 优化方案

    • 算法优化:检查是否可以使用更高效的算法,例如替代掉计算复杂度较高的函数。
    • 并行化:通过多线程或多进程处理,充分利用多核CPU。
    • 缓存优化:减少不必要的内存访问,优化数据访问模式。
  5. 验证优化效果
    优化代码后,再次使用perf recordperf report进行性能分析,确认优化是否有效。

5.2 案例2:分析I/O性能问题

I/O瓶颈是许多系统性能问题的来源,特别是在涉及大量磁盘读写操作的应用中。使用perf分析I/O性能可以帮助找出关键的瓶颈点。

步骤:
  1. 记录I/O性能数据
    使用perf的I/O性能事件,特别是syscalls:sys_enter_readsyscalls:sys_enter_write,来分析磁盘操作。

    perf record -e syscalls:sys_enter_read -e syscalls:sys_enter_write -a -- sleep 60
    

    该命令记录系统上所有进程的磁盘读写事件,持续时间为60秒。

  2. 查看报告
    通过perf report查看报告,找出消耗最多I/O时间的操作。输出中会列出每个I/O操作的调用情况。

    perf report
    

    如果报告显示某个文件的读取操作占用了大量时间,可以考虑该文件操作是否存在优化空间,例如批量读取、异步I/O等。

  3. 优化方案

    • 减少磁盘I/O操作:通过缓存机制或内存映射文件(mmap)减少磁盘访问频次。
    • 异步I/O:使用异步I/O操作来提高I/O效率,减少阻塞。
    • 调整磁盘缓存:通过调整操作系统的I/O缓存策略,提高磁盘的读取效率。
  4. 验证优化效果
    优化完后,重新运行perf进行测试,比较优化前后的性能差异,确认瓶颈是否得到缓解。

5.3 案例3:排查锁争用问题

在多线程程序中,锁竞争可能导致性能问题。使用perf工具可以帮助监控上下文切换和锁竞争,找出程序中哪些锁造成了瓶颈。

步骤:
  1. 记录锁竞争数据
    使用perf record捕获与锁相关的事件。例如,sched:sched_switch事件用于监控上下文切换,lock:lock_acquire事件用于捕获锁的获取。

    perf record -e sched:sched_switch -e lock:lock_acquire -a -- sleep 60
    

    该命令会记录所有进程的上下文切换和锁竞争信息。

  2. 查看报告
    通过perf report查看锁竞争的详细报告,识别出消耗较多时间的锁操作。

    perf report
    

    输出中会显示哪些锁竞争最严重,例如:

      Overhead  Command  Shared Object       Symbol
      ......     .......  ............       ......
      40.20%     my_program  libpthread.so.0   pthread_mutex_lock
      30.10%     my_program  my_program        thread_func
    

    从报告中可以看出,pthread_mutex_lock函数占用了大量的时间,可能是由于多个线程频繁竞争同一把锁。

  3. 优化方案

    • 减少锁粒度:通过减少锁的持有时间或使用更细粒度的锁(如每个线程独立的锁)来减少竞争。
    • 使用无锁数据结构:使用无锁队列、原子操作等无锁技术,避免锁竞争。
    • 锁的调度优化:通过合理的线程调度策略,减少锁竞争的机会。
  4. 验证优化效果
    优化完成后,重新进行perf分析,确保锁争用已得到解决,并观察上下文切换的频率是否有所降低。

5.4 案例4:分析容器中的性能问题

在容器化环境中,性能瓶颈通常与资源限制、虚拟化开销或容器内的资源争用有关。perf能够帮助我们分析容器中的性能问题,尤其是资源争用和瓶颈。

步骤:
  1. 记录容器性能数据
    在容器中运行应用时,使用perf分析CPU和内存的性能数据。例如,可以使用docker stats查看容器资源使用情况,然后结合perf record记录容器内的性能数据。

    perf record -p $(docker inspect --format '{{.State.Pid}}' my_container) -g -- sleep 60
    

    该命令会对指定容器(my_container)内的进程进行性能采样,采样持续60秒。

  2. 查看报告
    使用perf report查看容器内的性能报告。关注CPU、内存使用情况、上下文切换和锁竞争等方面的问题。

    perf report
    

    输出中会显示容器内各个进程的性能瓶颈,包括CPU消耗较多的进程和锁竞争等。

  3. 优化方案

    • 资源限制和调度优化:根据容器的资源限制(如CPU、内存等),进行相应的调整,避免资源超限导致的瓶颈。
    • 容器内的多核优化:确保容器内的应用能够充分利用多核CPU,避免单核限制。
    • 内存和网络优化:分析容器内的内存和网络使用情况,针对性地进行优化。
  4. 验证优化效果
    优化后,重新运行perf进行测试,确认优化措施是否有效,容器的性能是否得到提升。

小结

通过以上几个案例,我们展示了如何使用perf进行性能分析,并通过优化策略解决计算密集型程序、I/O性能、锁争用以及容器中的性能问题。perf作为Linux性能分析工具,提供了强大的功能,帮助开发者深入理解程序运行时的瓶颈,并采取针对性的优化措施,提升程序的整体性能。

6. perf进阶使用

perf是Linux中功能强大的性能分析工具,适用于各种复杂的性能分析需求。除了基本的CPU采样和堆栈跟踪,perf还支持许多高级特性和自定义功能,以帮助开发者和系统管理员深入分析系统的性能瓶颈。以下是perf进阶使用的一些重要功能和技巧。

6.1 自定义事件与硬件计数器

在Linux中,硬件性能计数器可以直接从CPU硬件获取有关系统性能的信息,如指令执行、缓存命中、分支预测错误等。通过perf,你可以自定义事件并利用硬件计数器来监控更为详细的性能数据。

定义自定义事件

perf支持多种硬件事件和软件事件,用户可以根据需求自定义事件。例如,常见的硬件计数器事件包括:

  • cycles:CPU周期
  • instructions:已执行指令数
  • cache-misses:缓存未命中的次数
  • branch-misses:分支预测失败次数
  • cpu-clock:CPU时钟

用户可以通过perf list命令查看可用的硬件事件:

perf list

如果需要监控特定硬件计数器事件,可以使用如下命令:

perf stat -e cycles,instructions,cache-misses,branch-misses ls

上述命令会统计ls命令执行过程中,cyclesinstructionscache-missesbranch-misses事件的发生次数。

使用硬件计数器

硬件计数器可以用来精确度量低级别的性能数据,能够帮助开发者深入了解CPU资源的使用情况。通过perf与硬件计数器结合,开发者可以在性能分析中实现更高的精度,尤其是在分析瓶颈时。下面是一个使用硬件计数器进行性能统计的例子:

perf stat -e cycles,instructions,cache-references,cache-misses,branch-instructions,branch-misses ./your_program

该命令将监控your_program程序的CPU周期、指令数、缓存命中与未命中、分支指令数和分支预测失败次数。

使用自定义事件进行调试

通过perf的自定义事件,用户可以为复杂的程序行为设置精细的性能分析目标。例如,你可以设置一个perf事件来监控某个特定函数或代码路径的执行次数:

perf record -e task-clock,cache-misses,cycles ./your_program

这个命令记录了程序的执行情况,并特别关注CPU周期和缓存未命中的事件。通过perf report分析这些事件,开发者可以发现程序的性能瓶颈所在。

6.2 结合BPF扩展分析能力

BPF(Berkeley Packet Filter)是一种强大的内核机制,用于执行低级别的高效程序,支持多种类型的动态跟踪和性能分析任务。perf与BPF工具的结合提供了更为丰富的性能分析能力,尤其是在网络流量、内存访问模式等复杂系统层面的问题上。

BPF与perf结合的优势
  1. 动态追踪:BPF程序能够在内核和用户空间动态地插入监控点,无需修改代码或重新编译,提供灵活性和高效性。
  2. 高效数据收集:BPF可以非常高效地收集数据并将其传递给用户空间,而perf则利用这些数据进行详细的分析。
  3. 网络流量分析perf与BPF结合后,可以用于深入分析网络流量和协议行为,帮助开发者识别网络瓶颈。
  4. 内存访问模式:通过BPF,perf能够提供更加详细的内存访问数据,如缓存命中与未命中的精确跟踪,从而帮助优化内存使用效率。
使用perf与BPF结合的例子

你可以使用perf与BPF工具结合进行网络性能分析。例如,下面的命令结合BPF用于分析网络流量:

perf record -e net:netdev_xmit -a

这将记录网络设备传输数据包的情况,并生成相关的性能数据。

如果想要使用BPF来分析内存访问模式,可以使用如下命令:

perf record -e cache-misses -g

这里,-e cache-misses事件用于跟踪缓存未命中的情况,而-g选项则启用了调用栈收集,结合BPF可以提供更详细的内存访问数据。

6.3 自动化性能分析

性能分析是一个持续的过程,尤其是在复杂的生产环境中,定期的性能采样和报告生成是必不可少的。通过将perf与脚本结合,可以实现自动化性能监控,帮助开发者持续追踪系统性能,及时发现问题并进行优化。

定期采样和报告生成

自动化性能分析通常依赖于定期运行perf命令并将结果导出。以下是一个简单的示例,演示如何使用定时任务定期运行perf并生成报告:

#!/bin/bash
perf record -F 99 -a -g -- sleep 60
perf script > /path/to/output/$(date +%F).perf

上面的脚本每分钟进行一次性能记录,并将结果保存到以当前日期命名的文件中。

你可以通过cron定时任务在后台运行这个脚本,定期进行性能采样:

crontab -e

然后添加如下内容:

*/5 * * * * /path/to/perf_script.sh

这会每五分钟运行一次perf采样并生成报告。

持续性能监控

除了简单的定期采样,perf还可以与日志系统结合,实时监控和收集性能数据。例如,你可以将性能报告发送到日志服务器,或利用syslog收集数据。以下是一个基本示例,展示如何将perf输出与syslog集成:

perf stat -e cycles,instructions,cache-misses -a > /dev/log

这样,perf的统计信息将直接发送到syslog,可以通过日志管理系统进行监控和进一步分析。

集成到CI/CD流程

在持续集成(CI)或持续交付(CD)流程中,自动化性能分析有助于及时发现回归问题。你可以将perf工具集成到CI/CD管道中,确保每次代码变更后都进行性能测试。例如,使用Jenkins或GitLab CI时,可以在构建阶段加入性能分析步骤:

perf stat -e instructions,cycles ./build_and_test

通过这种方式,可以在每次构建时自动运行性能测试,并生成相关报告,确保系统性能不会因为代码更改而出现退化。

7. 总结

本文介绍了perf这一Linux内核自带的性能分析工具,它广泛应用于系统性能监控、程序瓶颈分析和优化。perf通过访问性能监控单元(PMU)来收集硬件事件数据,如CPU周期、缓存行为等,并支持软件事件及用户定义的跟踪点,提供从硬件到用户态的全面性能洞察。阐述了perf的工作原理,包括如何捕捉硬件事件、采样与统计方法、以及数据处理流程。文中还提及perf为减少对系统性能的影响而采用的高效环形缓冲区和灵活的采样频率调整机制。

本文地址:https://www.vps345.com/10841.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP docker 容器 运维 java-rabbitmq java 服务器安全 网络安全策略 防御服务器攻击 安全威胁和解决方案 程序员博客保护 数据保护 安全最佳实践 服务器 linux 游戏 云计算 Deepseek Deepseek-R1 大模型 私有化部署 推理模型 网络工程师 网络管理 软考 2024 2024年上半年 下午真题 答案 神经网络 人工智能 深度学习 计算机视觉 卷积神经网络 deepseek DeepSeek-R1 API接口 数据库 centos oracle 关系型 安全 分布式 物联网 ubuntu harmonyos 华为 redis python 机器学习 javascript 前端 chrome edge ddos android 网络安全 web安全 RTSP xop RTP RTSPServer 推流 视频 网络 vue.js spring boot nginx c语言 YOLO conda pytorch vscode yolov5 进程 操作系统 进程控制 Ubuntu 英语 DNS Ollama Qwen2.5-coder 离线部署 macos windows gcc centos 7 tcp/ip 网络协议 ip协议 自动化 数据库系统 unix https 笔记 C 环境变量 进程地址空间 ssh pycharm ide 游戏引擎 学习 mysql adb 模型联网 API CherryStudio php 开发语言 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn CH340 单片机 嵌入式硬件 串口驱动 CH341 uart 485 ai nlp fstab llama 算法 opencv 自然语言处理 语言模型 阿里云 经验分享 django MCP spring cloud compose 持续部署 c# 云原生 ip 智能路由器 dell服务器 网络结构图 audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 AIGC 人工智能生成内容 Dify springsecurity6 oauth2 授权服务器 前后端分离 程序 编程 内存 性能分析 开源 milvus agi 科技 个人开发 ROS 自动驾驶 centos-root /dev/mapper yum clean all df -h / du -sh 负载均衡 tomcat 架构 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 部署 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 数据分析 kubernetes prometheus grafana jvm 虚拟机 qt arm 学习方法 dify 知识库 本地化部署 react.js 前端面试题 node.js gnu 指令 后端 计算机外设 bug typescript 计算机网络 UEFI Legacy MBR GPT U盘安装操作系统 ipython apache oracle fusion oracle中间件 开发环境 arm开发 交互 MacMini Mac 迷你主机 mini Apple ubuntu 18.04 安装教程 maxkb ARG vue3 excel 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 devops Ubuntu20.04 GLIBC 2.35 golang outlook 错误代码2603 无网络连接 2603 jellyfin nas VMware c++ 虚拟现实 并查集 leetcode Alexnet udp 本地环回 bind 实时音视频 音视频 rpc intellij-idea 外网访问 内网穿透 端口映射 远程工作 目标跟踪 目标检测 OpenVINO 推理应用 cron crontab日志 鸿蒙 ui 快捷键 旋转屏幕 自动操作 rust腐蚀 git npm USB转串口 asm virtualenv 策略模式 mcu fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse ArkUI 鸿蒙系统 ArkTS flutter Google pay Apple pay sql C语言 elasticsearch 性能优化 Linux xrdp 远程桌面 远程连接 vnc word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 debian PVE 高级IO epoll eureka live555 rtsp rtp 机器人 面试 AI-native gpt flask 小程序 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 YOLOv8 NPU Atlas800 A300I pro asi_bench 大数据 spark hive JDK Java LInux Windows ffmpeg 视频编解码 pip svn deepseek-r1 大模型本地部署 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 jenkins gitee 教程 环境搭建 Maven k8s http websocket ACL 流量控制 基本ACL 规则配置 burpsuite 安全工具 mac安全工具 burp安装教程 渗透工具 grub 版本升级 扩容 kafka AI大模型 大模型技术 本地部署大模型 聚类 json 课程设计 华为云 华为od GPU 统信 NFS nvm github 程序员创富 list 数据结构 IIS .net core Hosting Bundle .NET Framework vs2022 CPU 使用率 系统监控工具 linux 命令 虚拟显示器 远程控制 高效I/O postman 测试工具 python2 ubuntu24.04 openvpn server openvpn配置教程 centos安装openvpn VMware Tools vmware tools安装 vmwaretools安装步骤 vmwaretools安装失败 vmware tool安装步骤 vm tools安装步骤 vm tools安装后不能拖 vmware tools安装步骤 ollama 压力测试 大模型压力测试 EvalScope JAVA kylin maven 私有化 本地部署 stm32项目 stm32 ssh漏洞 ssh9.9p2 CVE-2025-23419 Linux PID vite zotero WebDAV 同步失败 代理模式 反向代理 安卓模拟器 mac 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 AI编程 p2p react next.js 部署next.js windows 服务器安装 perf EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 zabbix mariadb mysql离线安装 ubuntu22.04 mysql8.0 集成学习 集成测试 ue4 着色器 ue5 虚幻 移动端开发 思科 交换机 硬件 设备 PCI-Express gitlab unity llm DeepSeek Chatbox asp.net大文件上传 asp.net大文件上传下载 asp.net大文件上传源码 ASP.NET断点续传 程序人生 ubuntu20.04 开机黑屏 孤岛惊魂4 ros ros1 Noetic 20.04 apt 安装 实时互动 1024程序员节 LDAP 链表 adobe Doris搭建 docker搭建Doris Doris搭建过程 linux搭建Doris Doris搭建详细步骤 Doris部署 WSL2 IP 地址 命令 AutoDL IMM rag ragflow 大模型部署 zip unzip 嵌入式 系统安全 bash rsyslog IM即时通讯 QQ 微信 企业微信 剪切板对通 HTML FORMAT 桥接模式 vmware windows虚拟机 虚拟机联网 spring iftop 网络流量监控 Hyper-V WinRM TrustedHosts xcode qps 高并发 信息与通信 图像处理 ip命令 新增网卡 新增IP 启动网卡 多线程 C++ ansible 腾讯云 pygame GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 华为认证 环境迁移 cpu 实时 使用 pillow firewall 自定义客户端 SAS Linux 维护模式 AI 智能体开发 运维开发 C# MQTTS 双向认证 emqx opengl sublime text 编辑器 无人机 PX4 uni-app 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 前端框架 ssl vim 缓存 HarmonyOS Next visualstudio cursor transformer 数据挖掘 多线程服务器 Linux网络编程 frp burp suite 抓包 FTP 服务器 axure 富文本编辑器 电子信息 通信工程 毕业 媒体 QT 5.12.12 QT开发环境 Ubuntu18.04 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 进程优先级 调度队列 进程切换 虚拟局域网 TCP WebServer yum docker-compose docker compose dubbo matplotlib fonts-noto-cjk mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 监控k8s集群 集群内prometheus protobuf 序列化和反序列化 安装 express SRS 流媒体 直播 爬虫 游戏程序 ios rdp 远程服务 常用命令 文本命令 目录命令 政务 分布式系统 监控运维 Prometheus Grafana 冯诺依曼体系 fork wait waitpid exit gpu算力 银河麒麟 ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 matlab 电脑 scikit-learn kernel IIS服务器 IIS性能 日志监控 localhost 深度求索 私域 selenium 毕设 区块链 行情服务器 股票交易 速度慢 切换 股票量化接口 股票API接口 工具 powerpoint 7z kotlin android studio iphone openEuler 教育电商 vmamba Linux Vim VMware安装mocOS macOS系统安装 主从复制 FTP服务器 clickhouse Invalid Host allowedHosts vue jdk Python grep su sudo sudo原理 su切换 rust webrtc 产品经理 microsoft 云电竞 云电脑 todesk 安全威胁分析 Cursor langchain deep learning yolov8 卡死 html linux内核 java-ee MCP server C/S LLM termux nacos 互信 磁盘挂载 新盘添加 partedUtil 驱动开发 vSphere vCenter 软件定义数据中心 sddc 硬件工程 浪潮信息 AI服务器 CPU 主板 电源 网卡 软件工程 硬件架构 系统架构 大语言模型 LLMs lvm 磁盘分区 jmeter 软件测试 HCIE 数通 visual studio code linuxdeployqt 打包部署程序 appimagetool kali 共享文件夹 ocr 网络爬虫 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 3d 数学建模 VMware安装Ubuntu Ubuntu安装k8s 计算生物学 生物信息学 生物信息 基因组 etcd 数据安全 RBAC .netcore Ubuntu 22.04 MySql 算家云 算力租赁 diskgenius 云原生开发 K8S k8s管理系统 实验 王者荣耀 国产数据库 瀚高数据库 数据迁移 下载安装 报错 NVML nvidia-smi 计算机科学与技术 shell Hive环境搭建 hive3环境 Hive远程模式 rocketmq OpenCore 阻塞队列 生产者消费者模型 服务器崩坏原因 DevEco Studio TrueLicense linux上传下载 macbook 网易邮箱大师 jupyter 宝塔 ruoyi 华为OD 华为OD机试真题 可以组成网络的服务器 elk jar 微信小程序 miniapp 真机调试 调试 debug 断点 网络API请求调试方法 进程信号 samba MQTT 消息队列 智能手机 软件构建 MobaXterm 文件传输 intellij idea 读写锁 numpy 离线部署dify pdf 沙盒 需求分析 提示词 kubeless 源码剖析 rtsp实现步骤 流媒体开发 cuda ci/cd 代码规范 hadoop big data 微服务 IPMI n8n 工作流 串口服务器 nohup 异步执行 postgresql 大模型入门 大模型教程 SSH Xterminal Kali Linux 黑客 渗透测试 信息收集 ecmascript nextjs reactjs webdav 宝塔面板无法访问 vr linux驱动开发 web3.py 远程过程调用 Windows环境 tcp eclipse 热榜 程序员 open webui 压测 ECS MacOS录屏软件 Docker Desktop 雨云 NPS 信号处理 tcpdump 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 vu大文件秒传跨域报错cors Ubuntu22.04 虚拟化 开发人员主页 flash-attention Maxkb RAG技术 本地知识库 redhat ROS2 chatgpt oneapi 防火墙 端口号 开放端口 访问列表 大模型微调 镜像源 odoo 服务器动作 Server action iTerm2 创意 社区 db VMware创建虚拟机 notepad WebUI DeepSeek V3 Qualcomm WoS QNN AppBuilder rabbitmq 匿名管道 命名管道 netty efficientVIT YOLOv8替换主干网络 TOLOv8 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 ollama api ollama外网访问 wsl 回显服务器 UDP的API使用 智能体 autogen openai coze Agent CrewAI edge浏览器 onlyoffice remote-ssh RustDesk自建服务器 rustdesk服务器 docker rustdesk React Next.js 开源框架 安卓 升级 CVE-2024-7347 漏洞 Trae叒更新了? css css3 html5 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 智慧农业 开源鸿蒙 团队开发 KylinV10 麒麟操作系统 Vmware 灵办AI 网络药理学 生信 gromacs 分子动力学模拟 MD 动力学模拟 ESP32 camera Arduino 其他 GCC aarch64 编译安装 HPC EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 HP Anyware oceanbase 传统数据库升级 银行 es6 qt6.3 g726 软件需求 database WLAN Dell R750XS rancher VSCode iot 话题通信 服务通信 具身智能 Isaac Sim 虚拟仿真 一切皆文件 多层架构 解耦 服务器配置 linux环境变量 温湿度数据上传到服务器 Arduino HTTP WSL2 上安装 Ubuntu Mermaid 可视化图表 自动化生成 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 Trae IDE AI 原生集成开发环境 Trae AI VPN wireguard 微信分享 Image wxopensdk aws 职场和发展 嵌入式实习 硅基流动 ChatBox Kylin-Server 国产操作系统 服务器安装 Mac内存不够用怎么办 Cline nftables 镜像下载 freebsd 5G dash 正则表达式 vm 进程程序替换 execl函数 execv函数 execvp函数 execvpe函数 putenv函数 rc.local 开机自启 systemd 麒麟 客户端与服务端通信 CosyVoice 源代码管理 动静态库 强制清理 强制删除 mac废纸篓 华为证书 HarmonyOS认证 华为证书考试 深度优先 图论 并集查找 换根法 树上倍增 NAS Termux Samba python3.11 xml 换源 国内源 Debian mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 迁移指南 SWAT 配置文件 服务管理 网络共享 selete MAVROS 四旋翼无人机 AI写作 数据可视化 推荐算法 框架搭建 单元测试 券商 股票交易接口api 类型 特点 arcgis 环境配置 服务器扩容没有扩容成功 .net openssl 远程 执行 sshpass 操作 低代码 腾讯云大模型知识引擎 网络用户购物行为分析可视化平台 大数据毕业设计 基础环境 实战案例 视频平台 录像 视频转发 性能测试 视频流 存储 nohup后台启动 矩阵 双系统 arkUI 电路仿真 multisim 硬件工程师 硬件工程师学习 电路图 电路分析 仪器仪表 工业4.0 deepseek-v3 ktransformers umeditor粘贴word ueditor粘贴word ueditor复制word ueditor上传word图片 ueditor导入word ueditor导入pdf ueditor导入ppt Ubuntu共享文件夹 共享目录 Linux共享文件夹 Linux权限 权限命令 特殊权限 信号 内核 拓扑图 sdkman 客户端 显示器 底层实现 curl wget docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 安装MySQL 工具分享 P2P HDLC c autoware ros2 sqlserver openjdk junit 论文阅读 系统开发 binder 车载系统 framework 源码环境 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos ping++ 豆瓣 追剧助手 迅雷 YOLOv12 弹性计算 云服务器 裸金属服务器 弹性裸金属服务器 Webserver 异步 deepseak 文心一言 豆包 KIMI 腾讯元宝 多产物 CNNs 图像分类 unity3d 功能测试 自动化测试 web 智能电视 rustdesk 系统 黑苹果 GRE 小智 yaml Ultralytics 可视化 Web服务器 多线程下载工具 网络编程 PYTHON 图形化界面 H3C dns iperf3 带宽测试 googlecloud ICMP 云服务 systemctl composer alias unalias 别名 昇腾 大模型训练/推理 推理问题 mindie 桌面环境 seatunnel 僵尸进程 监控 自动化运维 安防软件 国产化 个人博客 webgl Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer Linux的基础指令 openstack Xen KVM pyside6 界面 firefox glibc Xinference kamailio sip VoIP 大数据平台 ragflow 源码启动 联网 easyconnect 代理 mybatis Reactor 设计模式 Redis Desktop Carla 智能驾驶 java-rocketmq ebpf uprobe 开发 云桌面 微软 AD域控 证书服务器 建站 Netty cudnn anaconda 海康 wireshark 虚拟机安装 beautifulsoup 版本 RDP springboot Mac软件 kylin v10 麒麟 v10 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 安全漏洞 信息安全 OpenManus ux 鲲鹏 npu ubuntu24.04.1 harmonyOS面试题 生活 webpack 视频监控 网站 大屏端 HiCar CarLife+ CarPlay QT RK3588 CLion shell脚本免交互 expect linux免交互 sysctl.conf vm.nr_hugepages 代码调试 ipdb 强化学习 单一职责原则 ollama下载加速 vasp安装 计算机系统 大模型应用 firewalld SSH 密钥生成 SSH 公钥 私钥 生成 中间件 iis Kali 渗透 移动云 MQTT协议 消息服务器 代码 图文教程 VMware虚拟机 macOS系统安装教程 macOS最新版 虚拟机安装macOS Sequoia stable diffusion AI作画 设置代理 实用教程 sqlite3 物联网开发 c/c++ 串口 mongodb 权限 CUPS 打印机 Qt5 k8s部署 MySQL8.0 高可用集群(1主2从) ESXi 远程看看 远程协助 EMQX 通信协议 gpt-3 mac设置host springcloud 浏览器自动化 DevOps 软件交付 数据驱动 应用场景 fd 文件描述符 蓝耘科技 元生代平台工作流 ComfyUI kind 飞牛nas fnos 模拟实现 用户管理 okhttp visual studio top Linux top top命令详解 top命令重点 top常用参数 文件系统 路径解析 NVM Node Yarn PM2 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 arkTs r语言 threejs 3D 计算机 HarmonyOS Tabs组件 TabContent TabBar TabsController 导航页签栏 滚动导航栏 mq AD域 ssrf 失效的访问控制 less 相机 Linux的权限 CentOS DIFY string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap DrissionPage ShapeFile GeoJSON Nginx Docker Hub docker pull daemon.json 锁屏不生效 视觉检测 bcompare Beyond Compare MS Materials 高德地图 鸿蒙接入高德地图 HarmonyOS5.0 Cookie 直播推流 机柜 1U 2U Windsurf GameFramework HybridCLR Unity编辑器扩展 自动化工具 IO 数据集 go 知识图谱 隐藏文件 隐藏目录 管理器 通配符 linux安装配置 minicom 串口调试工具 状态管理的 UDP 服务器 Arduino RTOS tar WSL win11 无法解析服务器的名称或地址 数据采集 Crawlee Playwright chatbox log4j photoshop 键盘 gitea armbian u-boot 中兴光猫 换光猫 网络桥接 自己换光猫 嵌入式系统开发 gradle 考试 加解密 Yakit yaklang ftp 云耀服务器 fpga开发 磁盘清理 统信UOS bonding 链路聚合 UOS 开机自启动 桌面快捷方式 跨平台 执法记录仪 智能安全帽 smarteye vscode1.86 1.86版本 ssh远程连接 统信操作系统 LLM Web APP Streamlit docker run 数据卷挂载 交互模式 retry 重试机制 自动化编程 openwrt llama3 Chatglm 开源大模型 京东云 iBMC UltraISO windows日志 Docker Docker Compose Kubernetes pyicu java-zookeeper k8s集群资源管理 RAGFLOW 笔灵AI AI工具 HistoryServer Spark YARN jobhistory moveit 机器人运动 域名服务 DHCP 符号链接 配置 ECT转485串口服务器 ECT转Modbus485协议 ECT转Modbus串口服务器 软件卸载 系统清理 Github加速 Mac上Github加速 Chrome浏览器插件 搜索引擎 监控k8s 监控kubernetes x64 SIGSEGV SSE xmm0 zookeeper 显示过滤器 Wireshark安装 copilot 磁盘监控 内网渗透 靶机渗透 全文检索 图搜索算法 免密 登录 公钥 私钥 Ardupilot sublime text3 WebVM 软链接 硬链接 单例模式 流水线 脚本式流水线 playbook 剧本 file server http server web server ufw ArkTs Office v10 软件 export import save load 迁移镜像 rime initramfs Linux内核 Grub RAID RAID技术 磁盘 ELF加载 hosts hosts文件管理工具 开源软件 KingBase 博客 负载测试 TRAE webstorm 3GPP 卫星通信 nac 802.1 portal 网卡的名称修改 eth0 ens33 宠物 毕业设计 免费学习 宠物领养 宠物平台 word web3 区块链项目 MNN Qwen NAT转发 NAT Server make命令 makefile文件 网络攻击模型 语音识别 wordpress DeepSeek行业应用 Heroku 网站部署 创业创新 裸机装机 linux磁盘分区 裸机安装linux 裸机安装ubuntu 裸机安装kali 裸机 VR手套 数据手套 动捕手套 动捕数据手套 env 变量 PyQt PySide6 游戏机 Ark-TS语言 ceph 即时通信 NIO gaussdb lb 协议 can 线程池 llama.cpp eNSP 网络规划 VLAN 企业网络 技术 cmos 大模型面经 大模型学习 显卡驱动 AnythingLLM AnythingLLM安装 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 resolv.conf telnet 远程登录 mamba 交叉编译 micropython esp32 mqtt 输入法 思科模拟器 Cisco 空间 查错 av1 电视盒子 机顶盒ROM 魔百盒刷机 nuxt3 进程间通信 ajax 算力 sonoma 自动更新 netlink libnl3 服务器管理 宝塔面板 配置教程 网站管理 Echarts图表 折线图 柱状图 异步动态数据 鸿蒙开发 可视化效果 neo4j 数据仓库 数据库开发 数据库架构 重启 排查 系统重启 日志 原因 容器技术 k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm 序列化反序列化 hdc docker desktop 镜像 银河麒麟服务器操作系统 系统激活 实时内核 solidworks安装 keepalived ArcTS ArcUI GridItem 代码托管服务 ruby 服务网格 istio 社交电子 线程 js cfssl 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 hibernate EVE-NG chrome devtools chromedriver HarmonyOS NEXT 原生鸿蒙 UDP UOS1070e springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 同步 备份 ssh远程登录 vscode 1.86 终端 网站搭建 serv00 服务器部署 本地拉取打包 直流充电桩 充电桩 微信开放平台 微信公众平台 微信公众号配置 可信计算技术 健康医疗 互联网医院 GRUB引导 Linux技巧 W5500 OLED u8g2 TCP服务器 SEO chfs ubuntu 16.04 fpga banner 本地部署AI大模型 网络穿透 Reactor反应堆 火绒安全 Nuxt.js uv iNode Macos lighttpd安装 Ubuntu配置 Windows安装 服务器优化 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? 技能大赛 7-zip OpenHarmony 小游戏 五子棋 servlet 毕昇JDK 致远OA OA服务器 服务器磁盘扩容 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 网络原理 CORS 跨域 wps 多进程 AI代码编辑器 uniapp 图形渲染 etl 蓝桥杯 恒源云 网络文件系统 nvidia 边缘计算 rnn Alist rclone mount 挂载 网盘 半虚拟化 硬件虚拟化 Hypervisor 能力提升 面试宝典 IT信息化 Web应用服务器 CentOS Stream Linux的基础开发工具 xfce perl 飞腾处理器 弹性服务器 minio Linux24.04 deepin Kylin OS Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 金融 混合开发 环境安装 CDN pgpool 密码学 业界资讯 端口测试 模拟退火算法 Xshell 田俊楠 jina code-server mosquitto 源码 lio-sam SLAM WINCC rpa skynet Bug解决 Qt platform OpenCV 信息可视化 echarts 考研 在线office AISphereButler 玩游戏 DBeaver 命令行 基础入门 wsgiref Web 服务器网关接口 产测工具框架 IMX6ULL 管理框架 网页设计 配置原理 MDK 嵌入式开发工具 论文笔记 Jellyfin Java Applet URL操作 服务器建立 Socket编程 网络文件读取 harmonyosnext ukui 麒麟kylinos openeuler Vmamba 服务器ssl异常解决 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 欧拉系统 Pyppeteer AList fnOS URL VPS pyqt trae IP配置 netplan archlinux kde plasma 向日葵 飞牛NAS 飞牛OS MacBook Pro RTMP 应用层 终端工具 远程工具 OD机试真题 服务器能耗统计 NLP模型 NLP cnn 自学笔记 小米 澎湃OS Android 邮件APP 免费软件 cpp-httplib opensearch helm 服务器主板 AI芯片 Ubuntu Server Ubuntu 22.04.5 MI300x 大模型推理 WebRTC Node-Red 编程工具 流编程 cpolar pppoe radius SoC 聊天服务器 套接字 Socket shard 智能音箱 智能家居 安全架构 fast IPMITOOL BMC 硬件管理 safari opcua opcda KEPServer安装 bat Claude Desktop Claude MCP Windows Cli MCP 历史版本 下载 workflow llamafactory 微调 源代码 图片增强 增强数据 游戏服务器 TrinityCore 魔兽世界 IPv4 子网掩码 公网IP 私有IP XCC Lenovo SVN Server tortoise svn 群晖 文件分享 电脑桌面出现linux图标 电脑桌面linux图标删除不了 电脑桌面Liunx图标删不掉 linux图标删不掉 繁忙 服务器繁忙 解决办法 替代网站 汇总推荐 AI推理 linux 命令 sed 命令 雨云服务器 token sas dba 崖山数据库 YashanDB anythingllm open-webui docker国内镜像 显卡驱动持久化 GPU持久化 prompt easyui 服务器部署ai模型 SSL 域名 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 SSH 服务 SSH Server OpenSSH Server saltstack 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 embedding ShenTong 银河麒麟操作系统 自动化任务管理 nfs client-go k8s二次开发 tensorflow 对比 meld DiffMerge GeneCards OMIM TTD 分子对接 autodock mgltools PDB PubChem 三级等保 服务器审计日志备份 Docker快速入门 机架式服务器 1U工控机 国产工控机 laravel yashandb 用户缓冲区 LORA 支付 微信支付 开放平台 yum源切换 更换国内yum源 音乐服务器 Navidrome 音流 内网环境 bootstrap SenseVoice 卸载 列表 支持向量机 黑客技术 流式接口 api DeepSeek r1 Open WebUI 联想开天P90Z装win10 mvc cocoapods 文件存储服务器组件 Attention 大文件秒传跨域报错cors 网工 充电桩平台 充电桩开源平台 g++ g++13 免费域名 域名解析 数据管理 数据治理 数据编织 数据虚拟化 软件开发 信任链 办公自动化 pdf教程 miniconda rtc zerotier RAG 检索增强生成 文档解析 大模型垂直应用 SSL证书 GPU训练 swift 医疗APP开发 app开发 trea idea 影刀 #影刀RPA# 免费 模拟器 管道 thingsboard es ftp服务 文件上传 VGG网络 卷积层 池化层 相差8小时 UTC 时间 pyautogui bot LVM lvresize 磁盘扩容 pvcreate 框架 DenseNet Linux find grep risc-v kvm qemu libvirt 电视剧收视率分析与可视化平台 cd 目录切换 Wi-Fi Obsidian Dataview 我的世界 我的世界联机 数码 EasyConnect 代理服务器 多端开发 智慧分发 应用生态 鸿蒙OS RAGFlow glm4 IPv4/IPv6双栈 双栈技术 网路规划设计 ensp综合实验 IPv4过渡IPv6 IPv4与IPv6 apt 录音麦克风权限判断检测 录音功能 录音文件mp3播放 小程序实现录音及播放功能 RecorderManager 解决录音报错播放没声音问题 virtualbox DocFlow Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 SysBench 基准测试 服务器时间 ubuntu24 vivado24 ecm bpm mysql安装报错 windows拒绝安装 宕机切换 服务器宕机 联机 僵尸毁灭工程 游戏联机 开服 idm conda配置 conda镜像源 cocos2d 3dcoat xpath定位元素 星河版 Minecraft DOIT 四博智联 wsl2 vsxsrv crosstool-ng Dell HPE 联想 浪潮 iDRAC R720xd Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 MAC SecureCRT powerbi 蓝牙 Helm k8s集群 稳定性 看门狗 树莓派 VNC RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 Typore XFS xfs文件系统损坏 I_O error 测试用例 大版本升 升级Ubuntu系统 d3d12 聊天室 日志分析 系统取证 实习 iventoy VmWare OpenEuler comfyui comfyui教程 vpn dity make 分析解读 FunASR ASR ECS服务器 pthread 蓝桥杯C++组 muduo 程序化交易 PTrade QMT 量化交易 量化股票 X11 Xming 飞牛 searxng uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 Zoertier 内网组网 Spring Security 金仓数据库 2025 征文 数据库平替用金仓 Linux环境 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 csrf postgres Dify重启后重新初始化 Qwen3 qwen3 32b vllm scapy AimRT 显示管理器 lightdm gdm 小艺 Pura X cmake docker命令大全 jetty undertow 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 Erlang OTP gen_server 热代码交换 事务语义 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 MVS 海康威视相机 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 银河麒麟桌面操作系统 xss dock 加速 Python基础 Python教程 Python技巧 win服务器架设 windows server proxy模式 我的世界服务器搭建 minecraft linux子系统 忘记密码 hugo 性能调优 安全代理 本地知识库部署 DeepSeek R1 模型 HTTP 服务器控制 ESP32 DeepSeek AI员工 dns是什么 如何设置电脑dns dns应该如何设置 查询数据库服务IP地址 SQL Server 分布式训练 Apache Beam 批流统一 案例展示 数据分区 容错机制 网页服务器 web服务器 ranger MySQL8.0 AI agent Claude 授时服务 北斗授时 智能合约 哈希算法 xshell termius iterm2 qt项目 qt项目实战 qt教程 fiddler 软考设计师 中级设计师 SQL 软件设计师 国标28181 监控接入 语音广播 流程 SIP SDP 状态模式 csrutil mac恢复模式进入方法 恢复模式 finebi docker search 多路转接 银河麒麟高级服务器 外接硬盘 Kylin VS Code 根服务器 极限编程 小智AI服务端 xiaozhi TTS USB网络共享 element-ui 上传视频并预览视频 vue上传本地视频及进度条功能 vue2选择视频上传到服务器 upload上传视频组件插件 批量上传视频 限制单个上传视频 合成模型 扩散模型 图像生成 AD 域管理 mybase nosql hexo 移动开发 ubuntu安装 linux入门小白 rsync 语法 内网服务器 内网代理 内网通信 浏览器开发 AI浏览器 项目部署 规格说明书 备选 调用 示例 bigdata react native IO模型 捆绑 链接 谷歌浏览器 youtube google gmail 飞书 easyTier 组网 prometheus数据采集 prometheus数据模型 prometheus特点 线程同步 线程互斥 条件变量 OpenSSH deployment daemonset statefulset cronjob 高频交易 wpf regedit 开机启动 chromium dpi sqlite kerberos finalsheel whistle Headless Linux 三次握手 集群管理 seleium IMX317 MIPI H265 VCU OpenManage TCP协议 设备树 flink 概率论 分布式账本 共识算法 Logstash 日志采集 玩机技巧 软件分享 软件图标 做raid 装系统 端口聚合 windows11 达梦 DM8 h.264 System V共享内存 进程通信 项目部署到linux服务器 项目部署过程 超融合 homeassistant 移动魔百盒 open Euler dde 网络建设与运维 软负载 Bandizip Mac解压 Mac压缩 压缩菜单 image 内存管理 动态规划 端口 查看 ss docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 MinIO Python 视频爬取教程 Python 视频爬取 Python 视频教程 Radius deepseek r1 mcp服务器 client close post.io 企业邮箱 搭建邮箱 Anolis nginx安装 linux插件下载 OS 企业网络规划 华为eNSP 僵尸世界大战 游戏服务器搭建 WireGuard 异地组网 钉钉 IPv6 IPv6测试 IPv6测速 IPv6检测 IPv6查询 ai工具 阿里云ECS ldap GIS 遥感 WebGIS node 抓包工具 paddle brew navicat Charles 架构与原理 打不开xxx软件 无法检查其是否包含恶意软件 AzureDataStudio 多个客户端访问 IO多路复用 TCP相关API IDEA qt5 客户端开发 android-studio gunicorn autodl 动态库 GCC编译器 -fPIC -shared triton 模型分析 pycharm安装 logstash vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 机械臂 Unity Dedicated Server Host Client 无头主机 Masshunter 质谱采集分析软件 使用教程 科研软件 NFC 近场通讯 智能门锁 百度云 矩池云 数据下载 数据传输 材料工程 docker部署Python 接口返回 搭建个人相关服务器 运维监控 midjourney 华为机试 信创 信创终端 中科方德 商用密码产品体系 sentinel yum换源 红黑树封装map和set 佛山戴尔服务器维修 佛山三水服务器维修 SystemV swoole 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 可执行程序 c/s 嵌入式Linux IPC web开发 无桌面 EMUI 回退 降级 figma 干货分享 黑客工具 密码爆破 匿名FTP 邮件传输代理 SSL支持 chroot监狱技术 技术共享 知行EDI 电子数据交换 知行之桥 EDI 增强现实 沉浸式体验 技术实现 案例分析 AR NVIDIA 可用性测试 GoogLeNet 跨域请求 Putty 花生壳 虚幻引擎 tailscale derp derper 中转 线性代数 电商平台 流量运营 问题解决 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 Sealos gitee go 欧标 OCPP 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 lua 脚本 Ubuntu 24.04.1 轻量级服务器 计算机学习路线 编程语言选择 gru 音乐库 烟花代码 烟花 元旦 网络搭建 神州数码 神州数码云平台 云平台 查看显卡进程 fuser ArtTS deekseek win向maOS迁移数据 金仓数据库概述 金仓数据库的产品优化提案 子系统 MacOS PPI String Cytoscape CytoHubba qtcreator #STC8 #STM32 抗锯齿 Qwen2.5-VL aac massa sui aptos sei ISO镜像作为本地源 游戏开发 数据库管理 HAProxy 输入系统 进程池实现 VM虚拟机 实时云渲染 云渲染 3D推流 sequoiaDB pyscenic 生信教程 lrzsz webview 华为鸿蒙系统 ArkTS语言 Component 生命周期 条件渲染 Image图片组件 ABAP authing 鸿蒙NEXT macOS 大大通 第三代半导体 碳化硅 mcp协议 go-zero 向量数据库 安装部署 milvus安装 存储维护 NetApp存储 EMC存储 ardunio BLE pxe 自定义登录信息展示 motd 美化登录 网络库 GRANT REVOKE AI Agent 字节智能运维 北亚数据恢复 oracle数据恢复 接口优化 西门子PLC 通讯 watchtower Qt QModbus 粘包问题 mujoco 解决方案 搜狗输入法 中文输入法 静态IP accept Metastore Catalog 李心怡 工厂方法模式 tidb pythonai PlaywrightMCP 火山引擎 设计规范 RK3568 solr 物理地址 页表 虚拟地址 带外管理 云计算面试题 流程图 mermaid caddy 元服务 应用上架 qwen2vl 软件商店 livecd systemtools 服务器正确解析请求体 STL UFW Unity插件 数字证书 签署证书 零售 风扇控制软件 计算虚拟化 弹性裸金属 notepad++ mapreduce 定义 核心特点 优缺点 适用场景 ubantu 漏洞报告生成 Multi-Agent CAD瓦片化 栅格瓦片 矢量瓦片 Web可视化 DWG解析 金字塔模型 Async注解 AWS 华为昇腾910b3 AI提示词优化 web环境 命令模式 PostgreSQL15数据库 bert 智能问答 Spring AI Milvus vCenter服务器 ESXi主机 监控与管理 故障排除 日志记录 事件驱动 模板 泛型编程 轮播图 OpenGL 顽固图标 启动台 SPI java毕业设计 微信小程序医院预约挂号 医院预约 医院预约挂号 小程序挂号 openvino 学习路线 手机 蜂窝网络 频率复用 射频单元 无线协议接口RAN 主同步信号PSS 能源 Modbus TCP 制造 文件共享 环境 非root 医院门诊管理系统 vmware tools 导航栏 devmem access blocked 破解 数字比特流 模拟信号 将二进制数据映射到模拟波形上 频谱资源 振幅频率相位 载波高频正弦波 Ubuntu 24.04 搜狗输入法闪屏 Ubuntu中文输入法 MLLMs VLM gpt-4v 代码复审 LVS 容器化 Serverless 动态域名 烟雾检测 yolo检测 消防检测 4 - 分布式通信、分布式张量 LSTM