最新资讯

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

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

2025-05-01 11:00:23 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/6714.html

搜索文章

Tags

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