性能优化是个永恒的话题,而很多时候我们在作性能优化的时候,往往基于代码上面的直觉,把所有能想到的优化都优化了一遍,不错过任何小的优化点,结果整个代码的逻辑变得极其复杂,而性能上面并没有太大的提升。事实上,性能问题往往集中在某些小点,有时候很小的改动就能有巨大的提升,所以问题的关键是是怎么去找出这些优化点,幸运的是 golang 在设计的时候就考虑了这个问题,原生提供了性能分析的工具,可以很方便地帮我们找到性能瓶颈

pprof 简介

golang 的性能分析库在 runtime/pprof 里,主要提供下面几个接口

// 堆栈分析

func WriteHeapProfile(w io.Writer) error // cpu分析 func StartCPUProfile(w io.Writer) error func StopCPUProfile()

使用上面比较简单,只需要将文件指针传给对应的函数即可,性能数据将写入到文件中,然后可以使用 golang 自带的 pprof 工具生成 svg,pdf 的可视化图,然后就可以很直观地从这些图里面看到主要的性能消耗了

举个例子

首先需要一个程序

首先需要在你的程序里面注入 pprof 代码,下面是一段示例代码,完整代码在:https://github.com/hatlonely/...

func main() {

go doSomething1() go doSomething2() go doSomething3() if err := pprof.PPCmd("cpu 10s"); err != nil { panic(err) } if err := pprof.PPCmd("mem"); err != nil { panic(err) } }

编译,运行上面代码会生成两个 pprof 文件,cpu.pprof.yyyymmddhhmmss 和 mem.pprof.yyyymmddhhmmss,编译运行的方法如下:

cd $GOPATH/src

git clone git@github.com:hatlonely/hellogolang.git

cd hellogolang

glide install

go build cmd/pprof_runtime.go

./pprof_runtime

pprof 文件分析

pprof 文件是二进制的,不是给人读的,需要翻译一下,而 golang 原生就给我们提供了分析工具,直接执行下面命令即可,会生成一张很直观的 svg 图片,直接用 chrome 就可以打开,当然也可以生成别的格式(pdf,png 都可以),可以用 go tool pprof -h 命令查看支持的输出类型

go tool pprof -svg ./pprof_runtime cpu.pprof.201801301415 > cpu.svg

注意这个工具依赖于 graphviz 工具,Mac 上可用 brew install graphviz,centos yum install graphviz 即可

golang java耗内存_分析golang内存占用情况相关推荐

  1. was查看java内存_性能测试WAS内存使用的探索和分析

    性能测试中,CPU和内存是关注最多的两个性能指标.以我行应用最多的系统架构(WAS+Oracle)来说,CPU使用率高的问题多发生于数据库,比如索引不当引发的表扫描.绑定变量使用不当引发的硬解析.连接 ...

  2. java假死_分析java进程假死

    一.引言 1.编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 2.编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现 ...

  3. nginx内存池大小快内存_使用直接内存时可以更快

    nginx内存池大小快内存 总览 使用直接内存不能保证提高性能. 考虑到它增加了复杂性,除非有充分的理由使用它,否则应避免使用它. 塞尔吉奥·奥利维拉(Sergio Oliveira Jr)的这篇出色 ...

  4. linux查看内存_嵌入式操作系统的内存,你了解多少?

    关注.星标公众号,不错过精彩内容 来源:EDN电子技术设计 linux 内存是后台开发人员,需要深入了解的计算机资源.合理的使用内存,有助于提升机器的性能和稳定性.本文主要介绍 linux 内存组织结 ...

  5. mysql数据库映射到内存_基于共享内存的数据库映射

    基于共享内存的数据库映射 概述 随着各类行业软件对性能追求越来越高,因此对数据库处理的速度提出了新的挑战.然而大部分复杂的业务处理往往依赖体量较大的关系数据(如:Oracle,Mysql,Postgr ...

  6. showdialog 尝试读取或写入受保护的内存_超频内存比超频CPU收益更大!影驰HOF OC Lab皑钻DDR4-4400评测...

    一.前言:名人堂超频实验室打造HOF OC Lab皑钻 最高可达5000MHz 超频对于DIY而言意味着什么呢?或许你可以说,DIY究极的追究就是极限的超频!早在2013年,影驰就创立了全球首家专业的 ...

  7. 性能测试中如何分析查看网络带宽占用情况

    介绍一种性能测试中,查看和分析网络带宽占用情况的方法和思路.这几天在性能测试中,BS架构系统中的一个功能点TPS(Transaction per second,即每秒完成事务数)上不去.使用常用的nm ...

  8. golang java耗内存_golang websocket内存泄漏

    我们有一个基于go-socket.io(socket.io golang实现)和gorilla websocket的websocket服务,但似乎有内存泄漏问题 . 即使我使用debug.FreeOS ...

  9. golang调用java的函数_大话golang性能分析(一):profile基本原理

    引言:好久没分享了,不多废话了,准备一个专题分三期来分享下golang的性能分析. O 专题目标 理解profile基本原理 熟悉go常用性能分析工具pprof 快速对线上服务的cpu.内存.goro ...

最新文章

  1. 疑难杂症——bash: /dev/null: Permission denied
  2. mysql的慢查询日志
  3. Java实现根据权重优先返回(速度较快)
  4. 桌面电话的进化到统一通信
  5. 【Breadth-first Search 】752. Open the Lock
  6. Python len函数 - Python零基础入门教程
  7. Opencv--warpPerspective +remap结合
  8. ssh框架http后台乱码问题
  9. 21天Jenkins打卡Day7-打包git代码
  10. mysql 语句 简书_MySQL基本语句
  11. 监控hdfs坏块脚本
  12. JS逆向|JavaScript代码改写成Python代码之小试牛刀
  13. 初始C语言——完数问题
  14. 计算机二级保存错地方,盘点考计算机二级那些容易出错的地方
  15. pta:人民币与美元汇率兑换程序(python)
  16. VMware Tools 安装成功无法从主机拖动文件到虚拟机
  17. html图片水平镜像翻转
  18. 百度语音识别之拼音识别
  19. STM32CubeMonitor监控程序目标变量并导出结果为csv格式
  20. python 64式: 第24式、python项目国际化翻译实战

热门文章

  1. matlab中怎么表示概率,[转载]matlab中的概率函数
  2. android cm 老罗,Android之父打造了一款全面屏旗舰 罗永浩如此评价
  3. Register DLL and OCX
  4. uboot向linux传递输出任何log信息的方法
  5. php json_encode小数精度丢失的问题
  6. Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法
  7. 将JSON对象带有格式的写出到文件中
  8. DOM克隆操作(深克隆/浅克隆)
  9. Datedifff返回两个日期之间的天数
  10. 【学习笔记】Xcode常见设置