文章目录
一、概述
为解决伶云中只能监控Apisix整体的性能指标问题,在Go插件中引入的pprof用于单独监控插件项目的相关性能指标。
本文主要介绍pprof中的常见性能指标及在本地使用时使用go tool查看内存使用数据的基本操作。
二、常见的性能指标
-
allocs:
-
功能:查看过去所有的内存分配信息
-
用途:用于分析程序的内存分配情况,找到可能导致内存泄漏或者不必要的大内存分配代码
-
-
block:
-
功能:查看导致同步原语阻塞的堆栈跟踪信息
-
用途:用于识别程序中的同步阻塞点,找到潜在的并发瓶颈
-
-
cmdline:
-
功能:查看当前应用程序的命令行完整的调用路径
-
用途:用于了解应用程序的启动参数和调用路径
-
-
goroutine:
-
功能:查看当前所有的协程堆栈跟踪信息
-
用途:用于了解当前程序中所有运行的协程,以及它们的堆栈信息
-
-
heap:
-
功能:查看活动对象的内存分配情况
-
用途:用于分析程序的堆内存分配情况,找到可能导致内存泄漏或者不必要的大内存分配的代码
-
-
mutex:
-
功能:查看互斥锁的竞争持有者的堆栈跟踪信息
-
用途:用于识别程序中互斥锁的竞争情况,找到可能的并发瓶颈
-
-
profile:
-
功能:CPU 的使用报告
-
用途:用于分析程序的 CPU 使用情况,找到可能导致性能瓶颈的代码
-
-
threadcreate:
-
功能:查看新线程的堆栈跟踪信息
-
用途:用于了解程序中新线程的创建情况,以及它们的堆栈信息
-
-
trace:
-
功能:整个应用程序的调用的堆栈信息
-
用途用于了解整个应用程序的调用路径和函数调用关系
-
三、基本使用
**前言:**统一网关的Go插件项目中已经集成了pprof,选用web网页采集
的方式供使用者操作,并与Gin框架复用一个Server端。
1、访问地址
1.1、本地调用
host:localhost
port:8080
path:/debug/pprof/**
1.2、外部调用
前提: 将apisix的8080端口映射为外部端口(下以映射的端口是31526为例)
host:伶云vip地址
port:31526
path:/debug/pprof/**
2、基本操作
2.1、页面访问
以本地调用为例,浏览器中访问 http://localhost:8080/debug/pprof/ 就能看到我们上面介绍过的性能指标了。
2.2、下载指标文件
我们可以点击到对应的指标进行查看,会发现这种形式我们很难看懂。这个时候,我们可以先点进某个指标的对应页面,比如 allocs,可以看到浏览器中的网址是 localhost:8080/debug/pprof/allocs?debug=1 我们把网址中的 ?debug=1 删除,并点击回车,浏览器就会自动帮我们下载对应的文件到我们电脑上,这样我们就获得了该项性能指标的数据了。
2.3、进入pprof控制台
以allocs为例,将文件拷贝到goland项目的根目录下,在terminal中使用go tool pprof .\allocs命令进入pprof控制台
2.4、命令及参数列表
使用help命令 可以获取命令列表、参数列表
2.5、top命令的基本使用
以top命令为例,执行 top 命令后,会在命令行中输出当前的内存消耗排行榜,显示消耗内存最多的函数,帮助快速定位内存使用率最高的部分,默认显示 10 条。可以通过添加参数 top n 来控制输出的条数。
2.6、list命令的基本使用
也可以使用 list Run 命令,执行后会在命令行中输出与函数 Run 相关的源代码,方便我们快速查找到有问题的源代码所在地,这对于进一步分析和优化性能问题很有帮助。