linux命令:

进程:top

收包丢包:netstat -su[c持续输出]


go tool pprof:

我们可以使用go tool pprof命令来交互式的访问概要文件的内容。命令将会分析指定的概要文件,并会根据我们的要求为我们提供高可读性的输出信息。

在Go语言中,我们可以通过标准库的代码包runtimeruntime/pprof中的程序来生成三种包含实时性数据的概要文件,分别是CPU概要文件内存概要文件和程序阻塞概要文件。下面我们先来分别介绍用于生成这三种概要文件的API的用法。

CPU概要文件

 

CPU主频:即CPU内核工作的时钟频率(CPU Clock Speed)。

CPU主频单位:CPU的主频的基本单位是赫兹(Hz),但更多的是以兆赫兹(MHz)或吉赫兹(GHz)为单位。时钟频率的倒数即为时钟周期。

时钟周期:时钟周期的基本单位为秒(s),但更多的是以毫秒(ms)、微秒(us)或纳秒(ns)为单位。在一个时钟周期内,CPU执行一条运算指令。

总结:也就是说,1000 Hz的CPU主频,每1毫秒(ms)执行一条CPU运算指令。 1 MHz的CPU主频,每1微秒(us)执行一条CPU运算指令。 1 GHz的CPU主频,每1纳秒(ns)执行一条CPU运算指令。

在默认情况下,Go语言的运行时系统会以100 Hz的的频率对CPU使用情况进行取样。也就是说每秒取样100次,即每10毫秒会取样一次。

为什么使用这个频率呢?因为100 Hz既足够产生有用的数据,又不至于让系统产生停顿。并且100这个数上也很容易做换算,比如把总取样计数换算为每秒的取样数。

实际上,这里所说的对CPU使用情况的 取样 就是对当前的Goroutine的 堆栈 上的程序计数器的取样。

由此,我们就可以从样本记录中分析出 代码的计算时间 或者说最耗CPU资源的部分。

我们可以通过以下代码启动对CPU使用情况的记录

func startCPUProfile() {
if *cpuProfile != "" {
f, err := os.Create(*cpuProfile)
if err != nil {
fmt.Fprintf(os.Stderr, "Can not create cpu profile output file: %s",
err)
return
}
if err := pprof.StartCPUProfile(f); err != nil {
fmt.Fprintf(os.Stderr, "Can not start cpu profile: %s", err)
f.Close()
return
}
}
}

在函数startCPUProfile中,我们首先创建了一个用于存放CPU使用情况记录的文件。这个文件就是CPU概要文件,其绝对路径由*cpuProfile的值表示。

然后,我们把这个文件的实例作为参数传入到函数`pprof.StartCPUProfile中。如果此函数没有返回错误,就说明记录操作已经开始。

需要注意的是,只有CPU概要文件的绝对路径有效时此函数才会开启记录操作。

如果我们想要在某一时刻停止CPU使用情况记录操作,就需要调用下面这个函数:

func stopCPUProfile() {
if *cpuProfile != "" {
pprof.StopCPUProfile() // 把记录的概要信息写到已指定的文件
}
}

在这个函数中,并没有代码用于CPU概要文件写入操作。实际上,在启动CPU使用情况记录操作之后,运行时系统就会以每秒100次的频率将取样数据写入到CPU概要文件中。

pprof.StopCPUProfile函数通过把CPU使用情况取样的频率设置为0来停止取样操作。并且,只有当所有CPU使用情况记录都被写入到CPU概要文件之后,pprof.StopCPUProfile函数才会退出。从而保证了CPU概要文件的完整性。

内存概要文件

内存概要文件用于保存用户程序执行期间的内存使用情况,也就是程序运行过程中堆内存的分配情况。

Go语言运行时,系统会对用户程序运行期间所有的堆内存分配进行记录。不论在取样的那一时刻、堆内存已用字节数是否有增长,只要有字节被分配且数量足够,分析器就会对其进行取样。

开启内存使用情况记录的方式如下:

func startMemProfile() {
if *memProfile != "" && *memProfileRate > {
runtime.MemProfileRate = *memProfileRate
}
}

go tool pprof --text http://localhost:6060/debug/pprof/heap

go tool pprof --web http://localhost:6060/debug/pprof/heap

go tool pprof --gv http://localhost:6060/debug/pprof/heap

go tool pprof --text http://localhost:6060/debug/pprof/heap

go tool pprof --text http://localhost:6060/debug/pprof

go tool pprof --text http://localhost:6060/debug/pprof/goroutine

go tool pprof --text http://localhost:6060/debug/pprof/threadcreate

go tool pprof --text http://localhost:6060/debug/pprof/heap

go tool pprof --text http://localhost:6060/debug/pprof/cpu

go tool pprof --text http://localhost:6060/debug/pprof/heap

go tool pprof --web http://localhost:6060/debug/pprof/heap

go tool pprof --text http://localhost:6060/debug/pprof/heap

go tool pprof --top http://localhost:6060/debug/pprof/heap

go tool pprof --text http://localhost:6060/debug/pprof/heap

go-statsd项目的更多相关文章

  1. .Net 开源项目资源大全

    伯乐在线已在 GitHub 上发起「DotNet 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-dotnet-cn (注:下面用 ...

  2. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

    郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...

  3. statsd+graphite

    一些观点: Statsd:一个nodejs的客户端,用于向graphite的收集器发送数据,使用各类编程语言的客户端响起发送timer,counter等统计数据后,其通过udp定时向graphite发 ...

  4. Java框架介绍-13个不容错过的框架项目

    本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...

  5. 13个不容错过的Java项目

    今天我们将整理一大波干货满满的Java示例代码与能力展示素材. GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能.无论如何,开发工作当中我们几乎 ...

  6. StatsD!次世代系统监控的核心

    在互联网业务蒸蒸日上的今时今日,系统架构日渐复杂,随着软件产品和工程团队的变革,许多开源的监控工具应运而生,其中有一些相当出名,比如 Zabbix.Nagios 还有 StatsD.也有一些问题被大家 ...

  7. Cloud Insight!StatsD 系监控产品新宠!

    年关将至,Cloud Insight 正式版悄然上线了.没有大张旗鼓的宣传,也没有热热闹闹的庆祝,只是一群人在上线前踏踏实实的优化了两周,然后发版,就是这样一件简单的事. 然而就是这样一个低调的产品, ...

  8. 【开源整理】.Net开源项目资源大全

    汇总了.NET平台开源的工具类库,新的内容在不断更新中.内容借鉴了博客园.伯乐在线.GitHub等平台. (注:下面用 [$] 标注的表示收费工具,但部分收费工具针对开源软件的开发/部署/托管是免费的 ...

  9. prometheus statsd 监控

    Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们 ...

  10. 项目管理系统 TAIGA 部署

    题记 使用了 MantisBT 一段时间,觉得功能太少,只局限在错误跟踪,而且操作体验比较差,界面很糟糕,很早就想将其换掉. 偶然发现一个很不错的新选择:Taiga,于是就试着将其部署下来,发现绝对是 ...

随机推荐

  1. centos6.5安装cmake-gui

    首先下载cmake(官网,2.8.12版本) 解压 运行 ./bootstrap --qt-gui make make install 完成后,在/usr/local/bin目录下会出现cmake-g ...

  2. php int 与 datetime 转换

    数据库日期类型是int类型的,该查询结果是datetime类型的 select from_unixtime( `dateline` ) from cdb_posts 如果原来类型是datetime类型 ...

  3. 04 linux用户群组和权限

    作业一: 1)新建用户natasha,uid为1000,gid为555,备注信息为“master” 2)修改natasha用户的家目录为/Natasha 3)查看用户信息配置文件的最后一行 4)为na ...

  4. 论文笔记:多标签学习综述(A review on multi-label learning algorithms)

    2014 TKDE(IEEE Transactions on Knowledge and Data Engineering) 张敏灵,周志华 简单介绍 传统监督学习主要是单标签学习,而现实生活中目标样 ...

  5. 如何在idea中设置 jsp 内容修改以后,立即生效而不用重新启动服务?

    点击 run---->edit configuration--->

  6. head中的title显示在body中

    今天遇到一个问题,就是title中的内容会显示在body中 <head> <title>324234</title> </head> 网上搜了一下是说编 ...

  7. 怎么解决teamviewer检测商业用途无法使用的问题

    https://jingyan.baidu.com/article/d5c4b52be51162da560dc517.html

  8. @RequestMapping @SessionAttributes @ModelAttribute注解用法

    简介: @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestM ...

  9. 前端工程师在实现支付功能的时候能做些什么(V客学院技术分享)?

    现在最流行的两种支付微信支付和支付宝支付,在日常开发的过程中肯定离不开支付功能的开发,有很多人第一次接触时会有些措手不及. 一.业务逻辑 (电商平台为例子) 支付大部分用在电商平台,各种打赏,游戏充值 ...

  10. 前端学习笔记之Z-index详解

    CSS当中的z-index属性看起来足够简单,但是如果你真的想了解它是如何工作的话,在这简单的表面之下,又有许多值得探究的内容. 在这篇教程中,通过探究层叠上下文和一系列实际的例子,我们将会阐明z-i ...