pprof的基本使用

一、概述

为解决伶云中只能监控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 相关的源代码,方便我们快速查找到有问题的源代码所在地,这对于进一步分析和优化性能问题很有帮助。

在这里插入图片描述

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Go pprof调试信息泄露漏洞,我可以给您一些基本的解释和建议。 Go语言的pprof工具是用于性能分析和调试的强大工具,但在某些情况下,它可能会泄漏敏感信息,例如堆栈跟踪和函数调用信息。这可能会导致安全风险,因为攻击者可以利用这些信息来了解您的应用程序的内部结构和运行情况。 为了防止pprof调试信息泄露漏洞,您可以考虑以下几点: 1. 保护pprof接口:默认情况下,pprof接口是公开的,任何人都可以访问。您可以通过在应用程序中配置身份验证和授权机制来限制对pprof接口的访问。例如,您可以使用基本身份验证或令牌验证来确保只有授权用户可以访问pprof接口。 2. 隐藏敏感信息:在pprof接口返回的数据中,可能包含敏感信息,如函数名称、文件路径等。您可以通过在编译时使用`-trimpath`选项来删除源代码路径,并使用`-gcflags="-N"`选项来禁用内联函数优化,以减少泄漏的敏感信息。 3. 限制pprof使用场景:如果您不需要在生产环境中使用pprof,可以考虑禁用pprof接口或仅在开发和测试环境中启用它。这样可以减少潜在的泄漏风险。 4. 定期更新和监控:及时更新您的Go语言版本和相关依赖,以获取最新的安全修复和漏洞修复。同时,定期监控应用程序日志和网络流量,以检测任何异常活动和潜在的信息泄露。 请注意,这些只是一些基本的建议,具体措施需要根据您的应用程序和安全需求进行评估和实施。如果您发现了pprof调试信息泄露漏洞或其他安全问题,建议您及时报告给Go语言社区或相关漏洞报告平台,以便修复和改进。 希望以上信息能对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值