使用 pprof 进行 golang 程序内存分析

前言在使用 golang 编写复杂的项目时,往往会有用到多协程并发的场景,这时候容易因为疏忽,产生协程泄漏的问题,进而产生类似于内存泄漏的后果。 本文主要针对协程泄漏问题的排查,提供 golang 程序内存可视化分析的思路和做法。pprof 简介pprof 是用于可视化和分析配置文件数据的工具。pprof 读取 profile.proto 格式的概要分析样本的集合,并生成报告以可视化并帮助分析数据。它可以生成文本和图形报告(通过使用 dot 可视化包)。pprof 使用方法埋点首先,我们需要在 ...阅读全文

51CTO博客 2021-01-20 18:43:29 mb6004f88aa04b6

GO 微服务GO-Micro(6)个人学习笔记记录- 万恶的环境搭建

环境搭建 注意事项:不要使用go 1.15,不然会一系列依赖问题的引发问题 注意事项:不要使用go 1.15,不然会一系列依赖问题的引发问题 注意事项:不要使用go 1.15,不然会一系列依赖问题的引发问题 开发环境:windos10 + goland + go 1.14 SDK 项目新建 (1) 新建项目(多版本的情况下) image.png image.png image.png (2)配置代理 image.png (3)查看新建项目MOD image.png (4)设置相关的环境变量信息 ...阅读全文

简书 2021-01-20 19:34:27 小钟钟同学

一文读懂 Serverless,将配置化思想复用到平台系统中

头图.jpg 作者 | 春哥大魔王 来源 | Serverless 公众号 写在前面 在 SaaS 领域 Salesforce 是佼佼者,其 CRM 的概念已经扩展到了 Marketing、Sales、Service 等领域。那么 Salesforce 靠什么变成了这三个行业的解决方案呢?得益于 Salesforce 强大的 aPaaS 平台。 ISV、内部实施、客户均可以从自己的维度基于 aPaaS 平台构建自己的行业,实现业务定制,甚至是行业定制。因为在此之前只有在 Sales 方向有专门的...阅读全文

简书 2021-01-20 19:34:16 Serverless

使用 google/wire 对 Go 项目进行依赖注入

google/wire 是 Go 语言的编译时依赖注入框架,与 Spring IoC 一样,wire 的目的也是让开发者从对项目中大量依赖的创建和管理中解脱出来,但两者在实现方式上有着很大的不同。 Go 中的依赖注入 在 Go 中,我们通常采取在构造函数中传入依赖的方式创建对象: func main() { NewUserStore(conf.Load(),db.InitMySQL()) } func NewUserStore(cfg *Config, db *mysql.DB) (*UserS...阅读全文

简书 2021-01-20 19:33:27 _CAFE_BABE_

【经验】相比RESTFUL API,我全面拥抱GraphQL的原因

背景 是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。 是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL REST 的 API 配合JSON格式的数据交换,使得前后端分离、数据交互变得非常容易,而且也已经成为了目前Web领域最受欢迎的软件架构...阅读全文

简书 2021-01-20 19:33:27 笔名辉哥

goland map底层原理

map是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢?总体来说golang的map是hashmap,是使用数组+链表的形式实现的,使用拉链法消除hash冲突。golang的map由两种重要的结构,hmap和bmap(下文中都有解释),主要就是hmap中包含一个指向bmap数组的指针,key经过hash函数之后得到一个数,这个数低位用于选择bmap(当作bmap数组指针的下表),高位用于放在bmap的[8]uint8数组中,用于快速试错。然后一个bmap可以指向下一...阅读全文

简书 2021-01-20 19:32:58 淘小铺刀仔

golang defer 特性姿势还是有必要了解下的!!!

[toc]Golang 的 defer 是什么?通俗来讲就是延迟调用。defer 会在当前函数返回之前执行 defer 注册的函数。比如 defer func_x( ) 这样语句会让你注册一个函数变量到 defer 的全局链表中,在 defer 语句所在的函数退出之前调用。笔者使用一段时间 Golang 之后,对 Golang defer 的理解认为作用有两点:panic 场景依然会被调用:这个是重要的一个特性,通常能简化我们的代码,确保无论任何场景,defer 的函数一定调用,通常用在锁或者资...阅读全文

51CTO博客 2021-01-20 15:26:02 mb6004f83c7725c

给前端的Golang介绍

现如今Golang在后端大火,介绍Golang的文章层出不穷,然而,很少有能跳出职能划分,从新的角度看待Golang的文章,既然如此,小的可以不自量力,来试一试了首先,为什么要站在前端的角度考虑Golang呢?因为Golang的原生异步并发能力这和前端有什么关系?先不急,我们来看一个例子:const [data,setData] = useState<string>("") useEffect(()=>{ console.log(data) },[data])复制代码这是一段 React 代码,...阅读全文

51CTO博客 2021-01-20 11:31:07 mb6004f83c7725c

Go基础及语法(四)

结构体,匿名结构体,构造函数,方法和接收者,结构体的值,结构体的嵌套和匿名字段,JSON序列化与反序列化结构体package main import "fmt" //定义结构体 type person struct { name string age int } func main() { p1 := person{name: "a", age: 18} //初始化结构体 fmt.Println(p1) //{a 18} }匿名结构体package main import "fmt" func ...阅读全文

51CTO博客 2021-01-20 10:13:22 mb6004f83c7725c

Go基础及语法(四)

结构体,匿名结构体,构造函数,方法和接收者,结构体的值,结构体的嵌套和匿名字段,JSON序列化与反序列化结构体package main import "fmt" //定义结构体 type person struct { name string age int } func main() { p1 := person{name: "a", age: 18} //初始化结构体 fmt.Println(p1) //{a 18} }匿名结构体package main import "fmt" func ...阅读全文

51CTO博客 2021-01-20 10:12:59 mb6004f83c7725c

程序员划水指南

文章持续更新,可以微信搜一搜「 golang小白成长记 」第一时间阅读,回复【教程】获golang免费视频教程。本文已经收录在 GitHub https://github.com/xiaobaiTech/golangFamily 有大厂面试完整考点和成长路线,欢迎Star。快过年了,跟我可爱的小侄子通了个电话,上来就说,"叔叔你头发怎么变少了",我很痛心,我的小侄子,年纪轻轻的,眼神已经这么不好使了。但转念一想,这也是他对我的一种关心,作为叔叔,也该回应一把,今年过年给他带一本《少儿编程》回去当...阅读全文

Segmentfault 2021-01-21 16:32:38 .container .car 等

Go 语言规范 - 编码风格篇

命名规则站在调用者的角度,包不是给你自己用的简洁、且见名知义采用通用、大众熟知的缩写命名。比如buf而不是bufio如果缩写的名字会产生歧义,则放弃或换个文件名整个应用或包的主入口文件应当是 main.go,或与应用名称简写相同。比如:spiker 包的主入口文件是 spiker.go,应用的主入口文件是 main.go包名包名与目录名一致如果一个目录下同时出现多个 package,则编译失败:found packages pkg (a.go) and pb (b.go) in XXX大多数使用...阅读全文

51CTO博客 2021-01-20 09:25:17 mb6004f83c7725c

golang gin框架 html模板布局layout 使用block块继承 最新完美版

golang gin框架 html模板布局layout 使用block块继承 最新完美版最近需要gin框架使用html模板开发几个界面在网上找了一遍gin框架使用模板layout布局,block继承的相关资料,一无所获,基本都是使用html自带的包通过解析文件最原始的方式使用的,要不就是gin框架中转换成原始的方式,于是就自己琢磨,怎样才能使用gin框架完美的使用到html的layout模板布局,结合其他语言的模板基础方式,突然灵光一闪,想到了下面这种方式,废话不多说,直接上代码demo简单布局...阅读全文

简书 2021-01-20 06:32:49 yuxingfei

go循环队列的实现

1、循环队列 队列的概念在顺序队列中,而使用循环队列的目的主要是规避假溢出造成的空间浪费,在使用循环队列处理假溢出时,本文采用以下两种方式来判断队满 在循环队列的结构体中加上一个length长度标识 少使用一个位置 2、初始化 //循环队列的数据结构 type Queue struct { //这里的指针并不是指针变量,而是用来表示数组当中元素下标的位置 front int //头指针 rear int //尾指针 length int //顺序表中元素的个数 queueSize int //初...阅读全文

简书 2021-01-20 06:32:47 Zppj

海量数据展示(二)-性能优化

背景    之前做的海量数据数据展示,在预处理速度和在线渲染上还有有所欠缺,本文中进行一些优化工作,使得九分钟处理完一千多万面数据的3-12级矢量切片,在线浏览数据请求时间控制在10s左右。准备    软件环境:PostGIS(3.0.0rc2 r17909)和 PostgreSQL( 12.0, compiled by Visual C++ build 1914, 64-bit),数据是微软开源的部分房屋数据public.california20191107(10988317条)。预处理   ...阅读全文

简书 2021-01-20 06:32:47 不玩了啊

go mod graph 可视化——gmchart

背景之前构建 golang 遇到个问题,就是明明指定了依赖的包版本,在构建时,又自动把版本号给升上去了,当时不知道为什么。后面知道有个 go mod graph 的命令能列出所有的依赖,试了下,一点都不直观,还得复制到文本编辑器里面来来检索信息。于是我就上网查了下相关工具。别的工具检索 Go Module 依赖关系 可视化网上还是有很多工具。大部分方案都 graphviz,echart, 或者用绘制图片,我就试了几个。graphviz 这个工具很强大,但需要通过其他渠道安装,且生成的svg可读性...阅读全文

51CTO博客 2021-01-19 23:28:45 mb6004f7ec10a08

聊聊并发,进程通信方式,go协程简单应用场景

开篇提问知道并发,并行,线程,协程概念吗?或者知道大概含义吗?有线程为什么还要有协程?区别是什么?『进程』通信方式知道几种?有没有超过3种?golang『协程』通信方式推荐?使用并发的目的是为什么?是能帮我们解决什么问题吗?概念并发,线程,协程:概念是不可能概念的,google去吧。或者点击这里,查看上一篇文章并行:一般是指多个CPU实例或者多台机器在『同一时刻』同时执行某个逻辑(方法)『进程』通信方式名称特点管道/匿名管道(pipe)管道的实质是一个内核缓冲区有名管道(FIFO)先进先出(fi...阅读全文

51CTO博客 2021-01-19 23:00:08 mb6004f7ec10a08

k8s-client-go源码剖析(一)

首发于2020年8月份,这里重新做一次发布简介:云原生社区活动---Kubernetes源码剖析第一期有幸参与云原生社区举办的Kubernetes源码剖析活动,活动主要以书籍《Kubernetes源码剖析》为主要思路进行展开,提出在看书过程中遇到的问题,和社区成员一起讨论,最后会将结果总结到云原生社区的知识星球或Github。第一期活动主要以书本第五章<Client-go编程式交互>为主题进行学习,计划共三周半。计划如下:client-go客户端学习Infoermer机制学习WorkQueue学...阅读全文

Segmentfault 2021-01-21 16:32:36 .container .car 等