分页池内存持续增长_gRPC双向流服务(go语言实现)内存优化小记

本文记录了一次针对gRPC双向流服务的内存优化过程,解决了分页池内存持续增长的问题。通过添加pprof调试,发现并修复了goroutine泄漏和map存储导致的内存泄漏。优化措施包括升级双向流扩展包、定时拷贝map以及减少无用存储。最后总结了排查内存泄漏和优化的方法,以及对Go语言GC机制的理解。
摘要由CSDN通过智能技术生成

c4138d0e42349dda42c81c6c6d9d73de.png

gRPC (https://grpc.io) 是一个由Google开发的高性能、开源、跨多种编程语言和通用的远程过程调用协议(RPC) 框架,用于客户端和服务器端之间的通信,使用HTTP/2协议并将 ProtoBuf (https://developers.google.com/protocol-buffers)作为序列化工具。

双向数据流模式(Bidirectional streaming RPC),是客户端和服务端都可以向对方发送数据流,这个时候双方的数据可以同时互相发送,实现了实时交互。我们想利用这个模式,简单替代长连接管理,让App具备在线用户感知并且可以随时触达任意在线客户端。

该服务通过gRPC进行了连接和用户ID的管理,以下简称双向流。在第一个版本上线后,如下图发现内存占用较大,UID和连接总数并不是一一对应。在关闭链接开关后,连接也未能如期望立刻释放。若再次开启,内存占用仍会持续增长,并不随活跃用户数而波动。

75ce73e1ecaaca447c3bceb434f3dfaa.png

由此开始了前前后后多次的优化,终于实现了内存占用的大幅下降和内存的稳定,平均1W链接大约占用50

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值