Nginx长连接gRPC场景下类内存泄漏问题技术求助
Nginx gRPC长连接内存泄漏排查求助
问题场景
- 负载均衡服务器需维持长生命周期的gRPC流连接,客户端不定期向Nginx反向代理发送小型gRPC请求
- 自研gRPC流测试客户端,在AWS EC2虚拟机环境中测试Nginx的CPU与内存占用情况
异常现象
- Nginx内存消耗呈线性持续增长,最终触发OOM killer
- 通过
Valgrind+massif工具排查,发现内存主要在ngx_chain_writer()中的ngx_alloc_chain_link()处分配;该函数逻辑合法,但因Nginx采用内存池机制,新手难以全面排查内存分配与释放环节
已尝试的无效操作
- 查阅Nginx官方文档的内存管理建议(如
keepalive_requests指令),但此类指令对gRPC流连接无效 - 尝试调整多种配置组合(如禁用证书),均未解决内存持续增长问题
3月13日更新
- 测试确认:内存泄漏并非由连接本身导致,而是与gRPC流消息数量直接相关——相同连接数下,消息数量翻倍时内存消耗也近乎翻倍
附相关信息
- Nginx配置文件
- 系统及Nginx版本信息
恳请提供解决方案建议。
内容的提问来源于stack exchange,提问作者Sangmin Lee
相关产品推荐
相关产品推荐

