3

我在 golang 中有一个简单的 grpc 服务器,它对对象执行 CRUD 操作。但是,当我运行它时,即使请求停止,内存也不会下降。heap show 的 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() 函数来释放内存。

4

1 回答 1

2

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

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

相关问题Golang 中的 GRPC 连接管理

于 2020-10-16T10:26:38.657 回答