https://github.com/Granulate/gprofiler
gProfiler 结合多个采样分析器,可统一可视化 CPU 所花费的时间,在原生程序中显示流程的堆栈痕迹1(包括戈朗)、爪哇和 Python 运行时间以及内核例程。
gProfiler 可以将其结果上传到Granulate 性能工作室,该工作室汇总不同时间段内不同实例的结果,并可为您提供整个集群中发生情况的整体视图。要上传结果,您必须注册并在网站上生成令牌。
本节描述了控制 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 持续运行,上传到颗粒性能工作室:
docker pull granulate/gprofiler:latest
docker run --name gprofiler -d --restart=always \
--network=host --pid=host --userns=host --privileged \
-v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
granulate/gprofiler:latest -cu --token <token> --service-name <service> [options]
对于使用 eBPF 进行分析,必须从容器内访问内核头。在乌本图,这个目录是指向的符号链接。上面的命令将安装这两个目录。/lib/modules/$(uname -r)/build``/usr/src
作为可执行项运行
运行以下程序,让格普菲勒连续运行,上传到颗粒性能工作室:
wget https://github.com/Granulate/gprofiler/releases/latest/download/gprofiler
sudo chmod +x gprofiler
sudo ./gprofiler -cu --token <token> --service-name <service> [options]
g 程序员默认情况下拆包可执行物;如果您的标记为,您可以添加在当前工作目录中拆开所有内容。/tmp``/tmp``noexec``TMPDIR=/proc/self/cwd
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 + 才能运行。
pip3 install -r requirements.txt
./scripts/build.sh
Then, run the following as root:
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.
- Uses Granulate’s fork of the phpspy project.
特定于运行时间的探查器生成包含运行时间信息(即 Java/Python 函数的堆栈)的堆栈跟踪,这与生成 JVM / CPython 口译员的原生堆栈不同。然后,运行时间堆栈合并到收集的数据中,以替换为这些过程收集的原生堆栈。perf``perf``perf
我们欢迎通过 Github 问题提供的所有反馈和建议:
发布新版本
- 更新在 .
__version__``__init__.py
- 创建具有相同版本的标签(合并更新后),并将其推送。
__version__
我们建议浏览我们的贡献指南,了解更多详情。
1:当前需要用帧指头编译配置的本地程序。 ↩