减少Docker和Kubernetes中的JVM内存占用

本文探讨了如何减少Kubernetes中基于JVM的Kafka sidecar内存占用。通过实验,作者发现设置Xms等于Xmx可稳定内存使用,减少Kafka消费者的内部消息缓冲区大小以及优化GC性能有效降低内存消耗。同时,减少KafkaConsumer的fetch.max.bytes、切换客户端或减少线程内存分配帮助不大。
摘要由CSDN通过智能技术生成

##前言
本文记录了如何在 Kubernetes[1] 上减小 JVM 应用容器占用的内存:哪些 JVM 标记更重要,如何正确设置以及如何测量参数对应用内存占用的影响。故事从一个工作中的问题开始。笔者为 Wix[2] 工作,作为数据流团队的一员负责所有的 Kafka[3] 基础设施。最近安排的任务是为 Node.js[4] 服务建立一个 Kafka 客户端代理。

0 问题:Kafka 客户端 sidecar 内存泄漏

笔者的想法是将所有与 Kafka 相关的(生产和消费)操作从一个 Node.js 应用委托给一个独立的 JVM 应用。这种安排是为了适应我司的 Kafka 基础设施 — 客户端greyhound 采用 Scala 开发(开源版本[5])。

借助 sidecar 应用,Scala 代码不需要用其他语言重写,只需要一层薄薄的封装即可。

在生产环境部署 sidecar 后,立刻注意到内存占用飙升:

内存使用统计 — container_memory_working_set_bytes

从上面的表格可以看出,单是 sidecar 占用的内存已经达到了 node 应用容器的4到5倍。这里 sidecar 基于 openjdk 8 运行,统计时包含了 kafka 库。于是开始着手分析原因以及如何减少内存占用。

1 用生产数据实验

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值