登录
首页 >  Golang >  Go问答

golang grpc Transport.newBufWriter 和 bufio.NewReaderSize 不释放内存

来源:stackoverflow

时间:2024-04-01 20:45:37 285浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《golang grpc Transport.newBufWriter 和 bufio.NewReaderSize 不释放内存》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我在 golang 中有一个简单的 grpc 服务器,它对对象执行 crud 操作。但是,当我运行它时,即使请求停止后内存也不会下降。堆显示的 pprof 有以下结果:

> flat  flat%   sum%        cum   cum%
>   932.39MB 62.45% 62.45%   932.39MB 62.45%  google.golang.org/grpc/internal/transport.newBufWriter
>   463.13MB 31.02% 93.46%   463.13MB 31.02%  bufio.NewReaderSize
>    13.50MB   0.9% 94.37%    13.50MB   0.9%  runtime.malg
>       13MB  0.87% 95.24%  1420.52MB 95.14%  google.golang.org/grpc/internal/transport.newHTTP2Server
>       11MB  0.74% 95.98%    12.10MB  0.81%  time.NewTimer
>     8.50MB  0.57% 96.54%     8.50MB  0.57%  golang.org/x/net/http2/hpack.(*headerFieldTable).addEntry
>     5.50MB  0.37% 96.91%    17.60MB  1.18%  google.golang.org/grpc/internal/transport.(*http2Server).keepalive
>     3.50MB  0.23% 97.15%     7.50MB   0.5%  google.golang.org/grpc/internal/transport.newLoopyWriter
>     1.50MB   0.1% 97.25%    12.50MB  0.84%  google.golang.org/grpc.(*Server).serveStreams
>          0     0% 97.25%       10MB  0.67%  golang.org/x/net/http2.(*Framer).ReadFrame

谁能指导我如何解决这个内存问题?服务器使用默认选项运行,我什至启用了 debug.freeosmemory() 函数来释放内存。


解决方案


您很可能需要关闭 ClientConn,或重新使用它。 我遇到了同样的问题,问题是为每个 RPC 调用创建新的 ClientConn 而没有稍后关闭这些连接。

这里有很好的解释 pooling-grpc-connections

相关问题GRPC Connection Management in Golang

到这里,我们也就讲完了《golang grpc Transport.newBufWriter 和 bufio.NewReaderSize 不释放内存》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>