pprof 查看goroutine

package main

import (
  "net/http"
  "runtime/pprof"
)

var quit chan struct{} = make(chan struct{})

func f() {
  <-quit
}

func handler(w http.ResponseWriter, r *http.Request) {
  w.Header().Set("Content-Type", "text/plain")

  p := pprof.Lookup("goroutine")
  p.WriteTo(w, 1)
}

func main() {
  for i := 0; i < 10000; i++ {
    go f()
  }

  http.HandleFunc("/", handler)
  http.ListenAndServe(":11181", nil)
}

 

这上面的例子中,我们启动了10000个goroutine,并阻塞,然后通过访问http://localhost:11181/,我们就可以得到整个goroutine的信息,仅列出关键信息:

goroutine profile: total 10004

10000 @ 0x186f6 0x616b 0x6298 0x2033 0x188c0
#0x2033  main.f+0x33 /Users/siddontang/test/pprof.go:11

  

可以看到,在main.f这个函数中,有10000个goroutine正在执行

转自:http://www.tuicool.com/articles/VBFNNfA

 

时间: 2024-10-07 22:30:39

pprof 查看goroutine的相关文章

技术解析系列 | PouchContainer Goroutine Leak 检测实践

划重点 本文将从什么是 goroutine leak,如何检测以及常用的分析工具来介绍 PouchContainer 在 goroutine leak 方面的检测实践. 0. 引言 PouchContainer 是阿里巴巴集团开源的一款容器运行时产品,它具备强隔离和可移植性等特点,可用来帮助企业快速实现存量业务容器化,以及提高企业内部物理资源的利用率. PouchContainer 同时还是一款 golang 项目.在此项目中,大量运用了 goroutine 来实现容器管理.镜像管理和日志管理等

Golang 特性简介

by sheepbao 主要大概介绍go语言的历史和特性,简单的入门. 来历 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的分布式集群,大牛觉得很闹心,后来c++委员会来他们公司演讲,说c++将要添加大概35种新特性.这几个大牛的其中一个人,名为:Rob Pike,听后心中一万个xxx飘过,“c++特性还不够多吗?简化c++应该更有成就感吧”.于是乎,Rob Pi

简洁和高效是我们永恒的眷恋

0x00 申明 本文并非水文,不会对Go语言做任何推广性宣传,只是陈述一个事实! 0x01 缘起 对 于我们猿(媛)类来说,写出的每一本程序都希望是:对于阅读代码或者维护代码的人是简洁的,对于服务方来说是高效的!简洁和高效这两个词,自从计算机出现 那一天起,一直都是一个至高无上的目标.个人认为面向对象提出来的“可维护性,可扩展性”只是“简洁”的引申义,而“可靠性,稳定性”则是“高效”的引申 义而已. 不知道别人是怎么认为的,至少我是一直这么追求的.所以几乎每次打开电脑第一件事都是关注一下业内新闻

go内存泄露case

用go写了一个守护进程程序:用于检测redis的存活状态并将结果写到zookeeper中,部署到redis机器上,对于每个redis实例会有一个goroutine每隔固定时间去检测其状态,由主goroutine负责信号处理等,再接收到信号时kill其他的goroutine.程序运行了一段时间发现,有些redis实例的对应zookeeper的信息不更新,通过日志发现对应redis的goroutine挂掉了.阅读源码发现貌似是zk的第三方库抛出一个非预期的异常导致. 为了解决这个问题,对逻辑重构:由

golang 核心开发者 Dmitry Vyukov(1.1 调度器作者) 关于性能剖析

让我们假设你有一golang 程序,想改善其性能.有几种工具可以帮我们完成这个任务.这些工具可以帮我们识别程序中的热点(cpu,io,memory), 热点即是那些需要我们集中精力于其上,能显著改善改善性能的地方.然而,另外一种结果也是可能的,工具帮我们识别出程序里的多种性能缺陷.比如,每次查询数据库,你都准备sql 语句,然而,你可以在程序启动时,只准备一次.另一个例子,一个O(n^2)的算法莫名其妙的溜进,某些存在O(n) 算法的地方.为了识别出这些情况,你需要合理检查程序剖析所看到的结果.

http.go

package nsqd import (     "bufio"     "bytes"     "encoding/json"     "fmt"     "io"     "io/ioutil"     "net"     "net/http"     "net/http/pprof"     "net/url&

Docker源码分析(五):Docker Server的创建

1.Docker Server简介 Docker架构中,Docker Server是Docker Daemon的重要组成部分.Docker Server最主要的功能是:接受用户通过Docker Client发送的请求,并按照相应的路由规则实现路由分发. 同时,Docker Server具备十分优秀的用户友好性,多种通信协议的支持大大降低Docker用户使用Docker的门槛.除此之外,Docker Server设计实现了详尽清晰的API接口,以供Docker用户选择使用.通信安全方面,Docke

golang---查看程序运行时状态

## 1. 介绍 对于生产环境中运行的进程,可以用 Go 内置的性能分析工具 pprof 窥测进程的当前状况. Profiling Go Programs 很好地演示了用 pprof 找到性能瓶颈的过程,这里只演示简单用法. 2. 启用实时的pprof 2.1 启用实时的 pprof 非常简单,只需要引入 "net/http/pprof",然后启动 http server 就可以了: import ( "fmt" "log" "net/

为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息

pprof是个神马玩意儿? pprof - manual page for pprof (part of gperftools) 是gperftools工具的一部分 gperftools又是啥? These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-threaded application