k8s部署Pyroscope并分析golang性能瓶颈

news/2024/12/29 23:31:15/

Pyroscope是什么

Pyroscope是一种开源的应用程序性能分析工具,它可以帮助我们发现和解决应用中的性能问题。Pyroscope支持多种编程语言并提供了丰富的性能数据,可以帮助我们跟踪应用程序的执行情况,并根据收集到的数据来识别性能瓶颈。

Pyroscope采用SaaS模式进行存储、可视化和交互操作。通过这种方式,我们可以快捷地调整监控方案以及优化性能。同时Pyroscope还支持直接在终端使用,可以方便地进行本地测试和排查问题。


语言支持:

  1. Golang:Golang 是 Pyroscope 最初支持的语言,Pyroscope 支持在 Golang 应用程序或二进制文件中集成 Pyroscope 并获取性能数据。

  2. Python: Pyroscope 可以与 Python 应用程序集成,并捕获应用程序的性能瓶颈和问题。

  3. Node.js:Pyroscope 支持 Node.js 应用程序,在 Node.js 应用程序或 Node.js 二进制文件中集成 Pyroscope 以获取性能数据。

  4. Ruby:Pyroscope 可以集成到 Ruby 应用程序中,从而捕获 Ruby 应用程序的性能问题。

  5. Java: Pyroscope 也支持 Java 应用程序,可以直接将 Pyroscope 集成到 Java应用程序的代码中以监测和分析其性能和瓶颈。

  6. PHP: Pyroscope 支持基于 PHP 编写的应用程序,使开发者可以通过 Pyroscope 分析 PHP 应用程序的性能数据。

  7. .NET: Pyroscope 支持基于 .NET 的应用程序,同时提供了 C# 和 F# 的客户端库供用户使用。


Pyroscope的主要特点包括:

  1. 低消耗:Pyroscope Agent不会对生产服务造成不利影响,仅会有很小的性能开销。

  2. 可扩展性:可以设置内容密度和频率等高级X-Factor选项,以使其适用于高负载的环境中。

  3. 高效性:记录每一次运行,所有性能数据都被同时调整为正常趋势线,数据聚合度高,并且不需要任何人工干预。

总之,Pyroscope是一个易于安装和使用的性能追踪工具,可以为我们提供关键的指标和见解,从而帮助我们更好地追踪和优化应用程序的性能。


k8s安装:

apiVersion: apps/v1
kind: Deployment
metadata:name: pyroscopenamespace: kube-logging
spec:replicas: 1selector:matchLabels:app: pyroscopetemplate:metadata:labels:app: pyroscopespec:containers:- name: pyroscopeimage: pyroscope/pyroscope:latestports:- containerPort: 4040env:- name: PYROSCOPE_LOG_LEVELvalue: "info"command: ["sh","-c","/usr/bin/pyroscope server"]resources:limits:cpu: "1"memory: "1Gi"requests:cpu: "500m"memory: "500Mi"volumeMounts:- name: data-dirmountPath: /var/lib/pyroscopevolumes:- name: data-dirhostPath:path: /home/data/
---
apiVersion: v1
kind: Service
metadata:name: pyroscope-servicenamespace: kube-logging
spec:selector:app: pyroscopeports:- protocol: TCPport: 4040#targetPort: 32644nodePort: 32644type: NodePort

启动

#kubectl apply -f ./
#kubectl get pod,svc -n kube-logging
NAME                             READY   STATUS    RESTARTS   AGE
pod/pyroscope-79b5648755-nlvrb   1/1     Running   0          67mNAME                        TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/pyroscope-service   NodePort   10.107.220.231   <none>        4040:32644/TCP   73m

访问

http://k8s_ip:32644
在这里插入图片描述

golang接入agent

package mainimport ("github.com/gin-gonic/gin""github.com/pyroscope-io/pyroscope/pkg/agent/profiler"
)func main() {profiler.Start(profiler.Config{     //Pyroscope启动ApplicationName: "luouoosdfjosjdof.purchases",  //名字ServerAddress:   "http://192.168.14.27:32644",  //Pyroscope地址})r := gin.Default()r.GET("/test", func(c *gin.Context) {c.JSON(200, gin.H{"message": "OK",})})r.Run() // default listen serve on 0.0.0.0:8080
}

发起请求

for i in {1..100};do hey -n 100 -m get  http://localhost:8080/test;sleep 0.1;done

分析查看

在这里插入图片描述


http://www.ppmy.cn/news/50544.html

相关文章

docker 离线安装

目录 服务介绍 软件下载 服务配置 二进制安装docker与docker-compose 服务管理命令 服务介绍 docker 是一个供开发和运维人员开发、测试、部署和运行应用的容器平台。 docker compose 是一个用于运行和管理多个容器的自动化编排工具。 软件下载 下载最新版本离线软件包地址…

Java基础——多线程创建

&#xff08;1&#xff09;什么是线程&#xff1f; 线程(thread)是一个程序内部的一条执行路径。程序中只有一条执行路径&#xff0c;那么这个程序就是单线程的程序。 &#xff08;2&#xff09;多线程是什么&#xff1f; 多线程是指从软硬件上实现多执行流程的技术。 &…

轻松掌握k8s的kubectl使用命令行操作Service知识点02

1、Service将同类型一组应用统一IP访问 将一组 Pods 网络服务的抽象方法。统一Ip后&#xff0c;默认就实现了负载均衡。 1、只在Pod内部任意机器访问的ClusterIp类型 在命令行操作生成一个ClusterIp地址。这种ClusterIp只能在Pod内部访问。 生成了ClusterIp之后&#xff0…

Vue CLI CSS 相关

Vue CLI 项目天生支持 PostCSS、CSS Modules 和包含 Sass、Less、Stylus 在内的预处理器。 引用静态资源 所有编译后的 CSS 都会通过 css-loader 来解析其中的 url() 引用&#xff0c;并将这些引用作为模块请求来处理。这意味着你可以根据本地的文件结构用相对路径来引用静态…

《Spring MVC》 第六章 MVC类型转换器、格式化器

前言 介绍MVC类型转换器、格式化器 1、使用场景 <form th:action"{/user/register}" method"post">用户名&#xff1a;<input type"text" name"userName"/><br/>密码&#xff1a;<input type"password&q…

为什么编译时选择动态链接库,而不是将库函数写到程序里

使用动态链接库的主要原因是节省内存和提高可重用性。如果将所有库写进程序里&#xff0c;那么每个程序都会包含大量重复的代码&#xff0c;导致程序的体积变得庞大&#xff0c;不仅占用程序的加载和运行速度。而使用动态链接库&#xff0c;这些模块只需要加载一次&#xff0c;…

PHP+python+nodejs+ springboot+vue 社区互助平台

项目介绍 社区互助平台的功能分为管理员和用户两个部分&#xff0c;系统的主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;租房信息管理&#xff0c;失物招领管理&#xff0c;宠物代遛管理&#xff0c;停车位出租管理&#xff0c;其他管理&#xff0c;趣…

VuePress打包后没有样式或者没有图片或者js加载失败

原因是没有部署到服务器上&#xff01;&#xff01;&#xff01; 这可能是我们打包后的东西 直接点击index.html 变成这样了&#xff01;&#xff01;什么样式都没有了&#xff0c;怎么办那&#xff1f; 很简单&#xff0c;找个服务器部署以下就什么都有了&#xff01;&…