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

news2024/10/5 19:18:22

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


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

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

什么是Pyroscope

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

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

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

有哪些连续分析器?

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

Pyroscope

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

Parca

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

Datadog

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

Google - Cloud Profiler

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

为什么使用 Pyroscope

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

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

 Pyroscope 允许任何语言的分析器向其发送数据,并让存储引擎有效地存储该数据。例如,Pyroscope 具有针对 GoPythonRubyeBPFJava.NETPHP Rust 的语言特定代理。

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

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

如何安装 Pyroscope

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

minikube start

添加 Helm 图表存储库:

helm repo add pyroscope-io https://pyroscope-io.github.io/helm-chart

安装 Helm 图表:

helm install pyroscope pyroscope-io/pyroscope --set service.type=NodePort

检查 Pyroscope Helm 图表安装成功:

helm list

检查 Pyroscope 是否正在运行:

kubectl get all

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

Google 微服务演示与 Pyroscope 集成

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

我们将使用来自 Google 微服务的 PythonGo .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 后,在同一文件夹下,我们继续构建和推送镜像。

docker build . -t beellzrocks/emailservice:latest

docker push beellzrocks/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"

)



func main() {



  pyroscope.Start(pyroscope.Config{

    ApplicationName: os.Getenv("APPLICATION_NAME"),

    ServerAddress:   os.Getenv("SERVER_ADDRESS"),

  })

  // code here

)

编辑 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 # To change Pyroscope Server Port change the value

        value: "http://pyroscope:4040"

    - name: PYROSCOPE_APPLICATION_NAME # Application name shown in the UI

        value: "email.service" 

    securityContext:

        capabilities:

        add:

        - SYS_PTRACE

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

kubectl apply -f https://raw.githubusercontent.com/infracloudio/microservices-demo-dev/master/release/kubernetes-manifests.yaml

获取 Pyroscope 的服务 url

minikube service pyroscope

|-----------|-----------|-------------|---------------------------|

| NAMESPACE |   NAME    | TARGET PORT |            URL            |

|-----------|-----------|-------------|---------------------------|

| default   | pyroscope | http/4040   | http://192.168.49.2:30639 |

|-----------|-----------|-------------|---------------------------|

🎉  Opening service default/pyroscope in default browser

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

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

Pyroscope 资源利用

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

 

使用 Pyroscope 进行监控

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

 

 

 

结论

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

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

欢迎点赞收藏转发,感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Camunda如何利于性能指标优化流程性能

Camunda 提供了一系列性能指标,以帮助用户评估和优化其业务流程的性能。以下是 Camunda 提供的一些常见性能指标: 1、流程执行时间(Process Execution Time):指从流程实例启动到完成的时间。 2、流程实例数&#xff…

共同成长 合力致远,就在2023亚马逊云科技合作伙伴峰会

在云计算蓬勃发展的今天,在推动业务发展、实现共赢的过程中,价值成就,是亚马逊云科技对合作伙伴自始至终的承诺。为助力合作伙伴成就价值,共建成长路径,2023亚马逊云科技合作伙伴峰会将于6月27日在上海世博中心重磅启幕…

好选客浅谈鞋靴行业找外贸客户~

鞋靴概述 鞋靴制品是指使用各种材料(如:皮革、布料、橡胶、塑料等)制作的款式、类型、功能各异的鞋子和靴子,包括日常通勤的休闲鞋、提供舒适的缓震和支撑的运动鞋与适用于正式场合的皮鞋和高跟鞋等,在保护脚部、提供…

Ubuntu18.04安装Autoware.ai 1.14 GPU版

硬件: CPU:i7-9700 显卡:GTX 1050 Ti 1-安装ROS 2-安装显卡驱动 1-删除旧版显卡驱动 sudo apt-get remove --purge nvidia*2-查看可供安装的驱动 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo apt-get …

期货黄金交易平台哪个最可靠?如何选择?

在期货黄金交易中,期货黄金交易平台是否可靠?如何才能快速筛选出可靠的黄金交易平台?对投资者来说都是很重要的。 期货黄金交易平台要保障用户资金安全 资金的安全性方面要求平台受到严格监管,最好是受多国监管的,这样…

低代码平台产品排行榜揭晓:这些产品值得你选择和使用

低代码平台改变了软件开发的方式。它不需要开发团队从头开始创建应用程序,而是允许用户在几乎没有编码知识的情况下构建自定义应用程序。这些平台为需要定制软件解决方案但没有预算或时间聘请开发团队的企业提供了一种简单且经济高效的解决方案。而在本文中&#xf…

抖音搜索/抖音下拉词/抖音seo/抖音关键词排名系统开发

为了优化抖音平台上的内容,开发抖音关键词排名系统成为了必要的措施。该系统可以针对搜索结果和下拉词进行分析,为用户提供更准确的搜索结果。为实现这一目标,开发团队进行了大量的市场调查和用户研究。 在开发过程中,团队利用了…

【来不及刷题之】32、编辑距离(动态规划)

明确dp函数的🍓💗👉定义dp(s1,s2,i,j ):s1[0…i]变成s2[0…j]的最小编辑距离选择:对于每一个位置,s1可以:不做任何操作(在相等时),删除,在后一个位…

PMP适合哪些人去考?

从技术向管理转型的工程技术人员:对于那些在职业生涯中转向项目管理的技术人员,PMP证书提供了必要的桥梁,使他们能够掌握项目管理的基本原理和最佳实践。 缺乏系统项目管理理论知识的项目经理:大部分项目经理都是技术出身&#x…

【OneNet】| stm32+esp8266-01s—— OneNet初体验 | 平台注册及设备创建 | demo使用

系列文章目录 失败了也挺可爱,成功了就超帅。 文章目录 前言1. OneNet平台注册2. 创建多协议接入设备3. 硬件连接4. 下载并运行Demo4.1 Demo下载4.2 运行Demo本小节结束 前言 最近准备耍下 Onenet平台 。下载了官方demo 遇到几个问题 1、创建接入设备 因为平台网页…

【LeetCode】5,最长回文子串。 难度等级:中等。解法很多,值得推敲。

文章目录 一、题目二、我的解答:双指针从头开始遍历2.1 暴力循环:超出时间限制2.2 优化后的暴力循环:虽然没有超时,但效率很低 三、双指针中心扩散法(从字符串中心开始遍历)四、动态规划法4.1 我的错误解答…

HTML+CSS实训——Day06——发现页的用JavaScript修改

仓库链接:https://github.com/MengFanjun020906/HTML_SX 前言 昨天学习了javascript的一些知识点&#xff0c;今天要学习dom的操作了&#xff0c;也就是文档对象模型的操作。 dom操作 <body><div id"i1">这是一个div</div><script>// dom…

一次redis主从切换导致的数据丢失与陷入只读状态故障

背景 最近一组业务redis数据不断增长需要扩容内存&#xff0c;而扩容内存则需要重启云主机&#xff0c;在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障&#xff0c;这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从&am…

Spring Boot 如何实现邮件发送

Spring Boot邮件发送 在现代的Web应用程序中&#xff0c;邮件通知已经成为了一项非常重要的功能。例如&#xff0c;在用户注册、密码重置、订单确认等方面&#xff0c;我们通常都会使用邮件来通知用户。在Spring Boot应用程序中&#xff0c;我们可以使用JavaMailSender来实现邮…

2022年长三角高校数学建模竞赛A题学在长三角解题全过程文档及程序

2022年长三角高校数学建模竞赛 A题 学在长三角 原题再现&#xff1a; 长三角高等教育规模和优质高等教育资源数量处于全国领先水平。从 2019年和 2013-2019 年的平均值来看&#xff0c;长三角地区人口数量在全国占比分别是 16.22&#xff05;和 16.10&#xff05;&#xff0c…

在Css上吃过的亏

一、前言 最近参加了公司的一个小程序的开发项目&#xff0c;虽然很简单&#xff0c;但是非常急三天就要交。本来就是实习生加上前端不熟练的我&#xff0c;最终在Css定位上吃了很大的亏。今天就来了解一下Css中的几个定位。 二、什么是定位 在Css中有一个position属性&…

技术干货 | ​Navicat 面向 PostgreSQL 查询超时的工具解决方案

早前&#xff0c;我们发表过一篇《PostgreSQL 与 Navicat &#xff1a;数据库的中坚力量》 &#xff0c;从产品的发展介绍了两者的渊源与共性&#xff0c;获得了许多童鞋的认可。而随着PostgreSQL 在国内热度愈发高涨&#xff0c;应用也愈发广泛。近期&#xff0c;我们收到许多…

Chirpstack服务器简介和搭建教程

LoRaWAN网络主要优势体现在低成本、广域连接和低功耗&#xff0c;同时具有较多的开源平台可供使用。使用Chirpstack服务器可以快速搭建本地LoRaWAN网络。本文重点介绍一下Chirpstack服务器是做什么的和Chirpstack服务器的安装教程&#xff1a; Chirpstack是一款多组件的、部署…

vue中 antdesginVue <a-image/>图片标签去掉蒙层(鼠标滑过)里面的“预览”二字 或者使用deep自定义样式不生效问题。

vue中 antdesginVue 图片标签去掉蒙层&#xff08;鼠标滑过&#xff09;里面的“预览”二字 或者使用deep自定义样式不生效问题。 看似去掉这两个字很简单&#xff0c; 其实搞了我一上午&#xff0c;是真的不好去掉呀&#xff0c;这里得吐槽下ant官方 。。。。什么deep呀都是不…

是面试官放水,还是公司实在是太缺人?这都没挂,字节跳动原来这么容易进...

字节是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在字节跳动做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有12K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在华为和…