Golang性能调优(go-torch, go tool pprof)

Go语言已经为开发者内置配套了很多性能调优监控的好工具和方法,这大大提升了我们profile分析的效率。此外本文还将重点介绍和推荐uber开源的go-torch,其生成的火焰图更方便更直观的帮我们进行性能调优。我也是在实际一次的性能调优中,接触到go-torch,非常棒。 go tool pprof简介 Golang内置cpu, mem, block profiler Go强大之处是它已经在语言层面集成了profile采样工具,并且允许我们在程序的运行时使用它们,使用Go的profiler我们能...阅读全文

2017年01月04日 15:27:58 WaltonWang
阅读:2734 评论:0

golang实现图片上传

## golang实现图片上传 该代码为使用beego实现前后端图片上传。话不多说,直接上代码。 #### 1.前端代码 html代码: ~~~ <div class="col-5 f-l text text-r">背景图(必须):</div> <div class="img-box"> <label> <span class="copy-btn Hui-iconfont">&#xe679;</span> <input t...阅读全文

2017-12-25 11:43:04 dlay0806
阅读:8746 评论:5

golang 高并发下 tcp 建连数暴涨的原因分析

背景:服务需要高频发出GET请求,然后我们封装的是 golang 的net/http 库, 因为开源的比如req 和gorequsts 都是封装的net/http ,所以我们还是选用原生(req 使用不当也会掉坑里)。我们的场景是多协程从chan 中取任务,并发get 请求,然后设置超时,设置代理,完了。我们知道net/http 是自带了连接池的,能自动回收连接,但是,发现连接暴涨,起了1万个连接。 首先,我们第一版的代码是基于python 的,是没有连接暴涨的问题的,封装的requests,封...阅读全文

2018-03-14 23:33:04 caucy
阅读:4409 评论:5

Go 执行追踪器(execution tracer)

## 概述 你有没有好奇过 Go 运行时是如何调度 goroutine 的?有没有深入研究过为什么有时候加了并发但是性能没有提高? Go 提供了执行跟踪器,可以帮助你诊断性能问题(如延迟、竞争或低并发等)、解决前面那些疑问。 Go 从 1.5 版本开始有执行跟踪器这么一个工具,原理是:监听 Go 运行时的一些特定的事件,如: 1. goroutine的创建、开始和结束。 2. 阻塞/解锁goroutine的一些事件(系统调用,channel,锁) 3. 网络I/O相关事件 ...阅读全文

2018-03-21 11:31:09 polaris
阅读:9405 评论:0

Golang 项目中如何对 API 进行测试?

本文首发于我的博客 简述 在日常后端业务开发中,我们经常会写一些 api,然后用 postman 测试下是否可用,可能就直接丢到线上去了。 然鹅这样做非常不严谨, 大部分情况下还是需要对 api 进行测试,以保证可用性。 我在项目中用到的是 httpexpect, 跟 nodejs 中的 mocha 有一些类似。在这里就不对基本的单元测试做介绍了,大家翻翻 golang 入门指南之类的文档就能看到。 使用 httpexpect 是一个端对端 api 测试工具 End-to-end HTTP an...阅读全文

2018-03-31 16:59 掘金
阅读:4073 评论:0

gf框架之基本介绍 - 哈喽世界!

文章来源:http://gf.johng.cn/494366 gf框架提供了非常强大的Web Server模块,由ghttp包支持,API文档地址: godoc.org/github.com/johng-cn/gf/g/net/ghttp。 哈喽世界! 老规矩,我们先来一个Hello World: package main import "gitee.com/johng/gf/g/net/ghttp" func main() { s := ghttp.GetServer() s.BindHand...阅读全文

2018-04-16 23:34:38 John
阅读:2122 评论:0

gf框架之分页模块(四) - Ajax分页

文章来源:http://gf.johng.cn/597434 Ajax分页与其他分页方式的区别在于,分页链接会使用Javascript方法来实现,该Javascript方法是分页方法,参数固定为该分页对应的分页URL地址。 完整示例如下: package main import ( "gitee.com/johng/gf/g/os/gview" "gitee.com/johng/gf/g/net/ghttp" "gitee.com/johng/gf/g/util/gpage" ) func ma...阅读全文

2018-05-21 12:34:38 John
阅读:628 评论:0

gf框架之平滑重启特性 - 功能强大灵活

文章来源:http://gf.johng.cn/625833 基本介绍 平滑重启(热重启)是指Web Server在重启的时候不会中断已有请求的执行。该特性在不同的项目版本发布的时候特别有用,例如,当需要先后发布两个版本:A、B,那么在A执行的过程当中,我们可以将B的程序直接发布覆盖A的程序,并使用平滑重启特性无缝地将请求过渡到新版本的服务中。 需要注意的是,该特性仅限于*nix系统(Linux/Unix/FreeBSD等等),在Windows下仅支持完整重启功能(请求无法平滑过渡)。 管理功能...阅读全文

阅读:1185 评论:1

10个常见"刁钻"的Redis面试问题

来源:老钱 高可用架构 导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 作者简介:钱文品(老钱),互联网分布式高并发技术十年老兵,目前任掌阅科技资深后端工程师。熟练使用 Java、Python、Golang 等多种计算机语言,开发过游戏,制作过网站,写过消息推送系统和MySQL 中间件,实现过开源的 ORM 框架、Web 框架、RPC 框架等 Redis在互联网技术存储...阅读全文

2018.07.24 10:09 Lewe超
阅读:2674 评论:0

Golang包管理工具之govendor的使用

本文个人博客地址为:http://www.huweihuang.com/article/golang/govendor-usage/ 本文个人博客地址为:https://huweihuang.net/article/golang/govendor-usage/ 更多golang包管理工具参考 golang包管理工具之glide的使用1. govendor简介golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会...阅读全文

2018年07月03日 20:25:24 tianlongtc
阅读:798 评论:0

golang中如何获得函数的函数名

如何获取golang中的函数的名字, 这里需要用到反射. 可以看如下代码. 重点使用 runtime.FuncForPC 这个函数获取函数名. 使用strings.FieldsFunc 对得到的带 路径名和包名的 函数名进行必要的处理. package main import ( "fmt" "reflect" "runtime" "strings" // "seps" "runtime/debug" ) func foo() { } func GetFunctionName(i interfa...阅读全文

阅读:13237 评论:0

我要在栈上。不,你应该在堆上

原文地址:我要在栈上。不,你应该在堆上 MySql 性能优化的资料分享 PPT+视频 链接: https://pan.baidu.com/s/1_d6KgmvCxtLIjReYV3H5Rw 提取码: fgv5 MySQL to ES的开源项目 https://github.com/siddontang/go-mysql-elasticsearch InnoDB锁: http://blog.itpub.net/column/29 前言 我们在写代码的时候,有时候会想这个变量到底分配到哪里了?这时候...阅读全文

阅读:2725 评论:1

读源码:redigo为什么多线程不安全

redigo是golang的一个操作redis的第三方库,之所以选择这个库,是因为它的文档十分丰富,操作起来也比较简单。一个典型的redigo的使用如下所示: package main import ( "github.com/gomodule/redigo/redis" "log" ) func main() { conn, err := redis.Dial("tcp", "192.168.1.2:6379") if err != nil { log.Fatalf("dial redis f...阅读全文

2019年06月18日 CoolJee
阅读:2161 评论:0

Go内存分配那些事,就这么简单!

原文链接:https://mp.weixin.qq.com/s/3g... 新老朋友好久不见,我是大彬,这篇文章准备了很久,不是在拖延,而是中间做了一些其他事情,耽搁了一些。 这篇文章主要介绍Go内存分配和Go内存管理,会轻微涉及内存申请和释放,以及Go垃圾回收。 从非常宏观的角度看,Go的内存管理就是下图这个样子,我们今天主要关注其中标红的部分。 友情提醒:文章有点长,建议先收藏,后阅读,绝对是学习内存管理的好资料。 本文基于go1.11.2,不同版本Go的内存管理可能存在差别,比如1.9与1...阅读全文

阅读:877 评论:0

Golang关于匿名结构体的一些总结

我们的故事的主人公是一个刚毕业的大学生小明: type User struct { RealName string Age int } user := User{RealName:"小明",Age:21} 25岁的时候他有了一辆车,于是我们为他定义一个车子的结构体: type Cart struct{ Brand string Price float64 } type User struct { RealName string Age int Cart Cart } cart := Cart{B...阅读全文

2019-12-13 21:32:42 游天小虾
阅读:7749 评论:0

golang 操作 elasticsearch

1、前提 1.1 docker 安装elasticsearch 查询elasticsearch 版本 docker search elasticsearch 将对应的版本拉到本地 docker.elastic.co/elasticsearch/elasticsearch:7.3.0 创建一个网络 docker network create esnet 启动容器 docker run --name es -p 9200:9200 -p 9300:9300 --network esnet -e "d...阅读全文

2020-06-11 08:32:54 hw_owen
阅读:4330 评论:0