编程语言:Go
Finding a memory leak in a Go app with cgo bindings
In this post, I’d like to share a story how my team was able to find and fix a memory leak in a Go app that’s been using a leaking C extension through cgo.
Golang 监控 HTTPS 证书过期时间
由于近几年 Let’s Encrypt 的兴起以及 HTTPS 的普及,个人用户终于可以免费 “绿” 一把了;但是 Let’s Encrypt ACME 申请的证书目前只有 3 个月,过期就要更换,最尴尬的是某些比较重要的东西(比如扶墙服务)证书一旦过期会耽误大事;而不同环境下自动更换证书工具也不一定靠谱,极端时候还是需要自己手动更换,所以催生了我想写个证书过期时间检测的小玩具的想法。
高德渲染网关Go语言重构实践
高德启动Go业务建设已经有段时间了,主要包含Go应用落地,Go中间件建设,云原生三个部分。经过持续的发力,在这些方面取得了不错的进展。高德Go业务落地过程是如何实现的,遇到过哪些问题,如何解决?
短视频go研发框架实践
hulk是短视频研发部研发的基于GDP2(Go Develop Platform )的go服务开发框架。它是⼀款⾯向业务的Web开发框架,提供了诸多开箱即⽤的组件和功能,可以⽤来快速开发Web服务。同时,依托于hulk框架并结合⼚内/业界优秀的开发实践,初步构建了⼀个符合业务应⽤场景的go⽣态体系。
Importing Protobuf with Go Modules
Protocol buffers and gRPC are established standards for building modern web services. Go modules are now the default way of versioning packages in Go projects. So how can you import and reuse existing .proto definitions from your versioned dependencies while using Go modules?
如何避免 Go 命令行执行产生“孤儿”进程?
在 Go 程序当中,如果我们要执行命令时,通常会使用 exec.Command ,也比较好用,通常状况下,可以达到我们的目的,如果我们逻辑当中,需要终止这个进程,则可以快速使用 cmd.Process.Kill() 方法来结束进程。但当我们要执行的命令会启动其他子进程来操作的时候,会发生什么情况?
Go 调用 Java 方案和性能优化分享
一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。
一文说尽Golang单元测试实战的那些事儿
单元测试,通常是单独测试一个方法、类或函数,让开发者确信自己的代码在按预期运行,为确保代码可以测试且测试易于维护。腾讯后台开发工程师张力结合了公司级漏洞扫描系统洞犀在DevOps上探索的经验,以Golang为例,列举了编写单元测试需要的工具和方法,然后针对写单测遇到的各种依赖问题,详细介绍了通过Mock的方式解决各种常用依赖,方便读者在写go语言UT的时候,遇到依赖问题,能够快速找到解决方案。最后再和大家探讨一下关于单元测试上的一些思考。
Go 语言中的零拷贝优化
相信那些曾经使用 Go 写过 proxy server 的同学应该对 io.Copy()/io.CopyN()/io.CopyBuffer()/io.ReaderFrom 等接口和方法不陌生,它们是使用 Go 操作各类 I/O 进行数据传输经常需要使用到的 API,其中基于 TCP 协议的 socket 在使用上述接口和方法进行数据传输时利用到了 Linux 的零拷贝技术 sendfile 和 splice。
我前段时间为 Go 语言内部的 Linux splice 零拷贝技术做了一点优化:为 splice 系统调用实现了一个 pipe pool,复用管道,减少频繁创建和销毁 pipe buffers 所带来的系统开销,理论上来说能够大幅提升 Go 的 io 标准库中基于 splice 零拷贝实现的 API 的性能。因此,我想从这个优化工作出发,分享一些我个人对多线程编程中的一些不成熟的优化思路。
Golang协程池的使用
系统开发部分需求涉及到了多任务执行,而多任务执行过程中需要处理并发问题。
go pprof实战
近期重构了项目的投放系统,有幸做了一次比较完整的服务优化,尤其针对trace方面的分析网上资料还是比较少了,这里结合自己的理解记录一下!
pprof++: A Go Profiler with Hardware Performance Monitoring
Golang是Uber数千个后端服务的命脉,在数百万个CPU核心上运行。了解我们的CPU瓶颈是至关重要的,这既是为了减少服务延迟,也是为了使我们的计算机群高效。Uber运营的规模需要对代码和微架构的影响有深入的了解。
虽然与其他几种语言相比,内置的Go剖析器比没有剖析器要好,但Go中事实上的CPU剖析器在基于Linux的系统上(也可能在其他操作系统上)有严重的局限性,并且缺乏许多[1, 2, 3, 4]充分理解CPU瓶颈所需的细节。
从操作系统的角度理解Goroutine – Go 协程设计系列(1/2)
Gopher们一脚迈进了并发编程的大门,冲刺着去体验天然并发带来的快感,却发现自己刚迈进去一半,就被并发的门槛绊摔了一跤。
Go实现的高性能http缓存服务器Jaguar
在业界,http 缓存服务器有一些前辈产品,有些公司内部也会自己实现 http 缓存服务器。我们在2015年落地详情页静态化方案的时候,主要参考了三个业界比较著名的 http 缓存服务器:VARNISH CACHE,SQUID 和 apache traffic server,但由于varnish 和 squid 对动静态数据合并支持比较弱,且当时 ATS 在业界有不少成功的业界场景并且性能卓越,所以最后选择了 ATS 来实现。而 NGIMX+LUA 的方式由于可能会需要用 lua 实现一些比较复杂的功能以及性能上不及 ATS,最后没有被采用。
字节跳动 Go RPC 框架 KiteX 性能优化实践
KiteX 自 2020.04 正式发布以来,公司内部服务数量 8k+,QPS 过亿。经过持续迭代,KiteX 在吞吐和延迟表现上都取得了显著收益。本文将简单分享一些较有成效的优化方向,希望为大家提供参考。
网易传媒Go语言探索
网易传媒于2020年底开始尝试Go语言的探索,用于解决内存资源使用率偏高,编译速度慢等问题,本文将详细描述传媒在Go语言方面的所做的工作和取得的收益。