GO GOPS学习

文章目录

      • [安装 gops](#安装 gops)
      • [使用 gops](#使用 gops)
      • [在 Go 程序中嵌入 gops 代理](#在 Go 程序中嵌入 gops 代理)
      • [gops 的常用命令](#gops 的常用命令)
      • 注意事项

gops 是一个用于列出和诊断系统中正在运行的 Go 程序的命令行工具。它能够显示 Go 进程的详细信息,包括堆栈跟踪、内存统计信息、Go 版本等,并提供了一些实用的诊断命令。

安装 gops

你可以通过以下命令安装 gops

bash 复制代码
go get -u github.com/google/gops

使用 gops

安装完成后,你可以通过在命令行中输入 gops 来查看当前系统中运行的所有 Go 程序。如果需要更详细的诊断信息,你可以在 Go 程序中嵌入 gops 的代理(agent),以便 gops 命令能够与之通信并获取更多信息。

在 Go 程序中嵌入 gops 代理

要在 Go 程序中嵌入 gops 代理,你需要在 main 函数中添加以下代码:

go 复制代码
import "github.com/google/gops/agent"

func main() {
    if err := agent.Listen(agent.Options{}); err != nil {
        log.Fatal(err)
    }
    // ... 你的程序逻辑 ...
}

这样,gops 就能够通过代理来访问你的程序并提供诊断信息。

gops 的常用命令

  • gops:列出所有 Go 进程。
  • gops <pid>:显示指定 PID 的 Go 进程的详细信息。
  • gops tree:以树状图形式显示所有 Go 进程。
  • gops stack <pid>:显示指定 PID 的 Go 进程的堆栈跟踪。
  • gops memstats <pid>:显示指定 PID 的 Go 进程的内存统计信息。
  • gops pprof-heap <pid>:获取并打开指定 PID 的 Go 进程的堆分析。
  • gops pprof-cpu <pid>:获取并打开指定 PID 的 Go 进程的 CPU 分析。

当然,以下是 gops 常用命令的一些示例用法:

  1. 列出所有 Go 进程

    bash 复制代码
    gops

    这个命令会显示系统中所有正在运行的 Go 进程的简要信息。

  2. 显示指定 PID 的 Go 进程的详细信息

    bash 复制代码
    gops <pid>

    <pid> 替换为你想要查看的进程的进程ID。这将显示该进程的详细信息,包括内存使用情况、CPU 使用率、启动命令等。

  3. 以树状图形式显示所有 Go 进程

    bash 复制代码
    gops tree

    这个命令会以树状结构展示所有 Go 进程及其相互关系,帮助你理解进程之间的父子关系。

  4. 显示指定 PID 的 Go 进程的堆栈跟踪

    bash 复制代码
    gops stack <pid>

    使用 <pid> 替换为目标进程的ID。这个命令会显示该进程的所有 goroutine 的堆栈跟踪,这对于调试死锁或理解程序的执行流程非常有用。

  5. 显示指定 PID 的 Go 进程的内存统计信息

    bash 复制代码
    gops memstats <pid>

    这个命令会显示指定进程的内存分配和垃圾回收统计信息。

  6. 获取并打开指定 PID 的 Go 进程的堆分析

    bash 复制代码
    gops pprof-heap <pid>

    这个命令会获取指定进程的堆分析并启动 go tool pprof 来交互式地查看堆使用情况。

  7. 获取并打开指定 PID 的 Go 进程的 CPU 分析

    bash 复制代码
    gops pprof-cpu <pid>

    这个命令会获取指定进程的 CPU 分析并启动 go tool pprof 来查看 CPU 使用情况。

注意事项

  • 如果你的程序没有嵌入 gops 代理,你将无法使用除了基本列表以外的诊断功能。
  • 如果你的程序使用了 UPX 压缩,gops 可能无法识别它是一个 Go 程序。
相关推荐
conkl几秒前
Apache网页优化实战指南 - 让网站加载速度提升
linux·运维·服务器·开发语言·阿里云·apache
梦境虽美,却不长几秒前
数据结构 学习 链表 2025年6月14日08点01分
数据结构·学习·链表
onlooker666610 分钟前
Go语言底层(五): 深入浅出Go语言的ants协程池
开发语言·后端·golang
刚子编程12 分钟前
C# WinForms 实现打印监听组件
开发语言·c#·winform·打印监听组件
blackA_15 分钟前
Javaweb学习——day3(Servlet 中处理表单数据)
学习·servlet
泽020222 分钟前
C++之模板进阶
开发语言·c++·算法
武子康27 分钟前
Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
java·开发语言·spring boot·后端·spring·架构·tomcat
梦境虽美,却不长40 分钟前
数据结构 学习 图 2025年6月14日 12点57分
数据结构·学习·
哆啦A梦的口袋呀1 小时前
基于Python学习《Head First设计模式》第十一章 代理模式
学习·设计模式·代理模式
时央1234561 小时前
C#使用Tuple方法实现OpreateResultModel功能
运维·开发语言·c#