0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解密服务性能利器:Pyroscope让你的应用飞起来

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2023-05-28 09:14 次阅读

开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因。为此,您通常需要可以通过日志和代码工具收集的信息。不幸的是,这种方法通常耗时,并且不能提供有关潜在问题的足够详细信息。

一种现代且更先进的方法是应用和使用分析技术和工具来突出显示最慢的应用程序代码,即消耗大部分资源的区域。

在这篇博文中,我们将讨论持续分析,然后使用名为 Pyroscope 的开源工具检测在 Kubernetes 上运行的微服务。

什么是Pyroscope?

必须对代码进行分析、调试和审查,以确定使其运行得更快的最有效方法。使用分析工具检查应用程序的代码有助于我们定位和修复性能瓶颈。这可以快速诊断应用程序的执行情况,并使程序员能够深入了解性能不佳的核心细节。结果是一个简化的代码库,减少了 CPU/内存消耗,使用户体验更好!

Profiling 是一种程序分析,用于测量程序的内存、时间复杂度或函数调用的频率和持续时间。分析信息用于帮助程序优化和性能。Profiler 程序可以跟踪每一行代码。连续分析

Continuous Profiler 用于更快、更轻松地进行故障排除。Continuous Profiler 是生产代码分析器,可让您随时间分析整个环境中的代码级性能。随着配置文件的不断收集,它们可以在引入新代码后快速揭示资源最密集的特性(或代码行)。优化可以减少最终云提供商帐户和用户的延迟。

有哪些连续分析器?

因此,这里列出了您可能遇到的一些分析器:

  • Pyroscope

Pyroscope是一个开源平台,由服务器和代理组成。它允许用户以 CPU 和磁盘高效的方式收集、存储和查询分析数据。

  • Parca

Parca收集、存储和提供配置文件,以便随着时间的推移进行查询。它是开源的,可以部署在生产环境中,因为 Parca 专注于对两种主要类型的配置文件进行采样分析:跟踪和采样。

Datadog Continuous Profiler始终在任何环境(包括生产环境)中分析和比较代码性能。它指出了由低效代码导致的难以复制的生产问题。还具有自动代码分析洞察力。

  • Google - Cloud Profiler

Cloud Profiler是一种低开销的统计分析器,可从您的生产应用程序中持续收集 CPU 使用率和内存分配信息。它具有可操作的应用程序分析、低影响的生产 Profilin 和广泛的平台支持。

为什么使用 Pyroscope

在我们开始探索 Pyroscope 之前,让我们看看它与市场上其他少数可用的连续分析工具有何不同。DataDog 和 Google Cloud Profiler 在业界被广泛使用。正如一位 Reddit 用户所指出的,以下是 Pyroscope 比其他两个更好的一些原因。

e24e12aa-fccb-11ed-90ce-dac502259ad0.jpg

Pyroscope 专注于构建专门用于分析数据的存储引擎,以尽可能高效地存储和查询数据。它使用代理服务器模型将配置文件从应用程序发送到 Pyroscope 服务器:

e26ab658-fccb-11ed-90ce-dac502259ad0.png

Pyroscope 允许任何语言的分析器向其发送数据,并让存储引擎有效地存储该数据。例如,Pyroscope 具有针对 Go、Python、Ruby、eBPF、Java、.NET、PHP 和 Rust 的语言特定代理。

另一方面,Parca 采用了稍微不同的方法,它依赖 eBPF 来编译 C、C++、Go 等语言。在撰写本文时,对其他语言的支持正在进行中。与 Pyroscope 类似,它也可以从 HTTP 端点读取任何pprof 格式的配置文件。从理论上讲,由于所有这些语言最终都会编译下来并在内核上运行,因此 eBPF 应该适用于这些语言中的任何一种。然而,在实践中,如果你真的为 Python 等解释性语言运行 eBPF,在许多情况下,函数名称对人类来说是不可读的。这是因为符号不是以这些语言存储的。

出于这个原因,Pyroscope 同时支持特定于语言的分析器和 eBPF 分析器。与仅在内核级别运行的 eBPF 相比,这以集成语言特定代理的工作量稍多为代价。但它也带来了更多可操作和人类可读的配置文件的好处。

如何安装 Pyroscope?

无论您使用什么,Docker、Linux,或者正在寻找 Ruby 或 Go 文档,Pyroscope 都可以启动服务器,然后再启动代理。即使您的目标是 10 秒或 10 个月的软件分析数据,他们定制设计的存储引擎也可以进行快速查询。— Pyroscope 网站

我们将使用 minikube 来运行 Kubernetes 集群。使用 minikube 创建集群:


	

minikubestart

添加 Helm 图表存储库:


	

helmrepoaddpyroscope-iohttps://pyroscope-io.github.io/helm-chart

安装 Helm 图表:


	

helminstallpyroscopepyroscope-io/pyroscope--setservice.type=NodePort

检查 Pyroscope Helm 图表安装成功:


	

helmlist

检查 Pyroscope 是否正在运行:


	

kubectlgetall

现在我们的 Kubernetes 集群中运行了 Pyroscope,我们将继续使用该应用程序的步骤。我们将使用Google 微服务来进行此演示。

将 Google 微服务演示与 Pyroscope 集成

我们将修改我们的容器镜像以使用 pyroscope 二进制文件。这个二进制文件将启动我们的应用程序并注入自己进行监控。您可以在此 Pyroscope 文档中参考更多内容。

我们将使用来自 Google 微服务的 Python、Go 和 .NET 微服务进行演示。所有修改都推送到GitHub 上的 Google 微服务分支,让我们来看看每个服务的这些更改。

注意:要在 Google 微服务演示中试用 Pyroscope,您无需自己构建 Docker 镜像。您可以只应用 Kubernetes 清单,如从微服务获取分析数据部分所示。

  • Python

我们将使用用 Python 编写的电子邮件服务应用程序。在DockerfilePyroscope 中使用 Python 应用程序需要进行以下更改。


	

COPY--from=pyroscope/pyroscope:latest/usr/bin/pyroscope/usr/bin/pyroscope CMD["pyroscope","exec","python","email_server.py"]

编辑 Dockerfile 后,在同一文件夹下,我们继续构建和推送镜像。


	

dockerbuild.-tbeellzrocks/emailservice:latest dockerpushbeellzrocks/emailservice:latest

  • .NET

我们将使用适用于 .NET 的应用程序 Cart Service。要将 .NET 应用程序与 Pyroscope 一起使用,需要对 Dockerfile 进行以下更改。


	

COPY--from=pyroscope/pyroscope:latest/usr/bin/pyroscope/usr/bin/pyroscope ENTRYPOINT["pyroscope","exec","-spy-name","dotnetspy","/app/cartservice"] 编辑 Dockerfile 后,我们继续构建和推送镜像。

  • GO

我们将采用 Go 编写的 Product Catalog Service 应用程序。要使用带有 Pyroscope 的 Go 应用程序,需要对server.go进行以下更改。


	

import( pyroscope"github.com/pyroscope-io/pyroscope/pkg/agent/profiler" ) funcmain(){ pyroscope.Start(pyroscope.Config{ ApplicationName:os.Getenv("APPLICATION_NAME"), ServerAddress:os.Getenv("SERVER_ADDRESS"), }) //codehere )

编辑 server.go 后,我们继续构建和推送镜像。

从微服务获取分析数据

我们修改了 Kubernetes 清单以将我们的图像与 Pyroscope 一起使用。

该kubernetes-manifests.yaml文件包含所有应用程序的资源。我们对其进行了编辑以使用我们在上述步骤中构建的镜像,即电子邮件服务、购物车服务、产品目录服务。


	

containers: -name:server image:beellzrocks/emailservice

在 Kubernetes 中运行 Pyroscope 时,我们需要做以下更改:

  • 添加SYS_PTRACE能力。

  • 告诉代理 Pyroscope 服务器的位置,以及使用环境变量的应用程序名称。


	

containers: -name:server env: -name:PYROSCOPE_SERVER_ADDRESS#TochangePyroscopeServerPortchangethevalue value:"http://pyroscope:4040" -name:PYROSCOPE_APPLICATION_NAME#ApplicationnameshownintheUI value:"email.service" securityContext: capabilities: add: -SYS_PTRACE

现在,要部署所有服务,您可以将 Kubernetes 清单应用到您的集群。


	

kubectlapply-fhttps://raw.githubusercontent.com/infracloudio/microservices-demo-dev/master/release/kubernetes-manifests.yaml

获取 Pyroscope 的服务 url:


	

minikubeservicepyroscope


	

|-----------|-----------|-------------|---------------------------| |NAMESPACE|NAME|TARGETPORT|URL| |-----------|-----------|-------------|---------------------------| |default|pyroscope|http/4040|http://192.168.49.2:30639| |-----------|-----------|-------------|---------------------------| Openingservicedefault/pyroscopeindefaultbrowser

要访问 Pyroscope UI,您可以访问 URL:http://192.168.49.2:30639(依据上述反馈打开实际地址)。

e29d5c8e-fccb-11ed-90ce-dac502259ad0.png

正如您在上面的屏幕截图中看到的,Pyroscope 本身在本地存储数据时占用的 CPU 使用率很低。它使用 Badger 数据库在本地存储数据。

Pyroscope 资源利用

监控 Kubernetes pod 在资源使用、利用率和成本控制方面也很重要。Pyroscope 使用低资源和低开销。

e2d5e310-fccb-11ed-90ce-dac502259ad0.png

使用 Pyroscope 进行监控

Pyroscope 根据编程语言使用不同的代理来分析代码。下面是一些使用 Pyroscope 的分析应用程序的火焰图示例。

e2fe5cd2-fccb-11ed-90ce-dac502259ad0.png

e33bacfe-fccb-11ed-90ce-dac502259ad0.png

e3a4ff9c-fccb-11ed-90ce-dac502259ad0.png

结论

持续分析性能是满足最终用户期望的关键因素。如果出现性能问题,您必须准备好在影响最终用户体验之前诊断问题。

因此,请继续优化您的应用程序并立即解决问题,以继续使用 Pyroscope 等工具为用户提供超快速的应用程序性能。Pyroscope 展示了一层可见性,可帮助您了解如何在生产环境中提高代码性能并降低云基础架构成本。

链接:https://zhuanlan.zhihu.com/p/620738986


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    2991

    浏览量

    41722
  • 开发人员
    +关注

    关注

    0

    文章

    19

    浏览量

    6298
  • kubernetes
    +关注

    关注

    0

    文章

    219

    浏览量

    8568

原文标题:解密服务性能利器:Pyroscope让你的应用飞起来

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    论坛秘密,急于求助时就冷淡,没有问题时人多飞起来!觉得进来顶

    本帖最后由 gk320830 于 2015-3-9 12:22 编辑 看了标题就知道我的意思了急于求助时就冷淡,没有问题时人多飞起来
    发表于 05-20 10:23

    的软件飞起来

    感觉写的不错,前来分享,做分享达人。。。{:soso_e106:}
    发表于 08-02 13:01

    的代码飞起来》 教你如何优化代码

    的代码飞起来
    发表于 04-18 12:09

    的软件飞起来

    本帖最后由 1563661808 于 2014-3-25 15:30 编辑 分享一个讲解软件优化的文档,觉得讲的挺好的!是有关摄像头编程的资料,顶一下
    发表于 08-28 01:33

    歪果仁做的超大歼星舰,可以飞起来的哦!

    ,这两个不同尺寸版本的歼星舰都飞了起来!小型版本歼星舰的制作时间只有几个小时,在测试过程中我们收集了关于飞机平衡等方面的信息,为我们制作4米长的大型歼星舰打下了基础。结构制造过程要让一个大东西飞起来首先要
    发表于 12-28 14:59

    的软件飞起来

    的软件飞起来
    发表于 11-05 14:54

    子弹飞起来是否也很好奇这背后的黑科技?

    。多条语音消息更是令人抓狂,尤其是在工作场合、在外出差时非常不便。子弹短信默认的消息发送形式是“语音+文字”,文字的优先级更高。当然,也可以根据自己的需求选择仅发送纯文字或纯语音。除了语音转文字的高效
    发表于 08-31 09:01

    请问hmc5883的作用是什么?

    请问四轴中HMC5883磁阻传感器对飞行姿态的调整有什么作用?去掉它而只用mpu6050可不可以飞起来?想从最简单的做起,首先可以飞起来就行
    发表于 04-01 06:36

    四轴不够力飞起来

    四轴整重52g。程序参考匿名。不加PID,直接调油门,加到最大,就平移一点,不够力飞起来。但是就算是加到最大,电机转速也没到最大。直接调转速的的话。就是占空比大约在380/1000左右最大,再上去
    发表于 04-22 00:35

    人工神经网络之深度学习

    人类的好奇心是科学技术进步的源泉。飞机的发明就是人类对鸟类飞行的好奇心产生的,一开始是在奴隶的身上安装类似羽毛的纺织物,奴隶从悬崖上面跳下去,结果奴隶无法像鸟儿那样的飞起来。后来,模仿蝙蝠的翅膀
    发表于 07-12 07:03

    面向云计算的服务性能模型研究

    为了衡量云计算的服务性能,分析了云计算服务的处理过程,提出了一个以排队论为基础的云计算服务性能模型。以Amazon SimpleDB的更新延迟为例,仿真验证了该模型,并以此为基础,分
    发表于 10-24 12:05 38次下载
    面向云计算的<b class='flag-5'>服务性能</b>模型研究

    让你的程序飞起来

    让你的程序飞起来
    发表于 10-25 10:18 12次下载
    让你的程序<b class='flag-5'>飞起来</b>

    电脑卡慢惹人烦 这五个妙招可以让Linux飞起来

    玩儿电脑最怕的就是卡慢,那么电脑卡慢应该怎么解决呢?对于windows系统来说,你可能有各种免费的杀毒软件、全家桶帮你清空系统空间,那么Linux系统怎么办?今天笔者就为大家介绍几种方法,清空你的Ubuntu或者其他基于Ubuntu的Linux系统,让Linux系统“飞起来”。
    发表于 04-18 15:26 1366次阅读

    旋转飞椅为什么会飞起来

    旋转飞椅为什么会飞起来
    发表于 04-06 16:45 0次下载
    旋转飞椅为什么会<b class='flag-5'>飞起来</b>?

    超简单:用Python让Excel飞起来

    超简单:用Python让Excel飞起来
    发表于 05-25 10:46 40次下载