https://github.com/Granulate/gprofiler

gProfiler 结合多个采样分析器,可统一可视化 CPU 所花费的时间,在原生程序中显示流程的堆栈痕迹1(包括戈朗)、爪哇和 Python 运行时间以及内核例程。

gProfiler 可以将其结果上传到Granulate 性能工作室,该工作室汇总不同时间段内不同实例的结果,并可为您提供整个集群中发生情况的整体视图。要上传结果,您必须注册并在网站上生成令牌。

g普罗菲勒运行在Linux上。

本节描述了控制 gProfiler 输出的可能选项以及各种执行模式(作为容器、作为可执行项等)。

输出选项

g 专业文件可以以两种方式产生输出:

  • 创建聚合的、折叠的堆栈样本文件 () 和火焰图文件 ()。两个符号链接 (和 ) 总是指向最后一个输出文件。profile_<timestamp>.col``profile_<timestamp>.html``last_profile.col``last_flamegraph.html
    使用/选项指定输出目录。--output-dir``-o
    如果给出,则只保留最后的结果(通过和)。这可以用来避免随着时间的推移增加 gProfiler 的磁盘使用量。与(提前解释)一起有用 - 历史结果可在颗粒性能工作室获得,最新的结果可在本地获得。--rotating-output``last_profle.col``last_flamegraph.html``--upload-results
    --no-flamegraph可以给出以避免生成的文件-只有折叠的堆栈样本文件将被创建。profile_<timestamp>.html
  • 将结果发送到颗粒性能工作室,通过筛选、见解等进行在线查看。
    使用/标志。传递选项,以指定 Granulate 性能工作室提供的令牌,以及指定所收集配置文件的标识符的选项,如将在颗粒性能工作室中查看。使用同一服务名称从众多 gProfilers 发送的个人资料将汇总在一起。--upload-results``-u``--token``--service-name

注意:两个标志可以同时使用,在这种情况下,gProfiler 将创建本地文件上传结果。

分析选项

  • --profiling-frequency:分析的采样频率,在赫兹
  • --profiling-duration:每次分析会话的持续时间,在几秒钟内。
  • --profiling-interval:每个分析会话之间的间隔,在几秒钟内。

默认的剖析频率为11赫兹。使用更高的频率将带来更准确的结果,但将在配置文件系统和程序上创建更大的开销。

默认持续时间为60 秒,默认间隔与它匹配。因此,gProfiler 会背靠背运行分析会话 - 下一个会话在上一个会话完成后立即开始。

  • --no-java, 相应地禁用 Java 和/或 Python 的运行时间特定的剖析器。--no-python

连续模式

gProfiler可以以连续模式运行,使用/标志定期分析。请注意,使用时,将在每个采样间隔内创建新文件。只有在上传到颗粒性能工作室时,才能进行聚合。--continuous``-c``--continuous``--output-dir

作为码头集装箱运行

运行以下程序,让 gProfiler 持续运行,上传到颗粒性能工作室:

  1. docker pull granulate/gprofiler:latest
  2. docker run --name gprofiler -d --restart=always \
  3. --network=host --pid=host --userns=host --privileged \
  4. -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro \
  5. -v /var/run/docker.sock:/var/run/docker.sock \
  6. granulate/gprofiler:latest -cu --token <token> --service-name <service> [options]

对于使用 eBPF 进行分析,必须从容器内访问内核头。在乌本图,这个目录是指向的符号链接。上面的命令将安装这两个目录。/lib/modules/$(uname -r)/build``/usr/src

作为可执行项运行

运行以下程序,让格普菲勒连续运行,上传到颗粒性能工作室:

  1. wget https://github.com/Granulate/gprofiler/releases/latest/download/gprofiler
  2. sudo chmod +x gprofiler
  3. sudo ./gprofiler -cu --token <token> --service-name <service> [options]

g 程序员默认情况下拆包可执行物;如果您的标记为,您可以添加在当前工作目录中拆开所有内容。/tmp``/tmp``noexec``TMPDIR=/proc/self/cwd

  1. sudo TMPDIR=/proc/self/cwd ./gprofiler -cu --token <token> --service-name <service> [options]

可执行的已知问题

以下平台目前未支持可执行的 gProfiler:

  • 乌本图 14.04
  • 高山

备注: 基于容器的执行工作,可在这些情况下使用。

以库伯内特斯 · 戴蒙塞特的身份跑步

有关运行gProfiler的达蒙塞特的基本模板,请参阅 gprofiler.yaml。请务必在适当的位置插入和变量!GPROFILER_TOKEN``GPROFILER_SERVICE

从源头运行

g 普罗菲勒需要 Python 3.6 + 才能运行。

  1. pip3 install -r requirements.txt
  2. ./scripts/build.sh

Then, run the following as root:

  1. python3 -m gprofiler [options]

Each profiling interval, gProfiler invokes in system wide mode, collecting profiling data for all running processes. Alongside , gProfiler invokes runtime-specific profilers for processes based on these environments:perf``perf

  • Java runtimes (version 7+) based on the HotSpot JVM, including the Oracle JDK and other builds of OpenJDK like AdoptOpenJDK and Azul Zulu.
    • Uses async-profiler.
  • The CPython interpreter, versions 2.7 and 3.5-3.9.
    • eBPF profiling (based on PyPerf) requires Linux 4.14 or higher. Profiling using eBPF incurs lower overhead. This requires kernel headers to be installed.
    • If eBPF is not available for whatever reason, py-spy is used.
  • PHP (Zend Engine), versions 7.0-8.0.

特定于运行时间的探查器生成包含运行时间信息(即 Java/Python 函数的堆栈)的堆栈跟踪,这与生成 JVM / CPython 口译员的原生堆栈不同。然后,运行时间堆栈合并到收集的数据中,以替换为这些过程收集的原生堆栈。perf``perf``perf

我们欢迎通过 Github 问题提供的所有反馈和建议:

发布新版本

  1. 更新在 .__version__``__init__.py
  2. 创建具有相同版本的标签(合并更新后),并将其推送。__version__

我们建议浏览我们的贡献指南,了解更多详情。

1:当前需要用帧指头编译配置的本地程序。