Pulsar-broker节点内存阶段性出现波峰和波谷

大佬们好:
目前生产环境的pulsar-broker节点经常出现波峰和波谷情况。如图所示:


且服务的gc情况,通过metrics接口返回的数据情况:


请问下,大佬们大概是什么原因会导致这种情况发生,希望不吝解答。谢谢

有没有大佬帮忙回复一下问题,感谢了。现在现网还是在频繁的堆内存抖动

参考一下这个?Confused with method getMemUsage() in LinuxBrokerHostUsageImpl.java · Issue #16564 · apache/pulsar · GitHub
顺便提供一下更多的环境信息,版本等。

你好,我们这边broker服务使用docker容器启动的,broker的版本基于社区2.8.0版本构建,docker的版本:Docker version 1.13.1, build 092cba3
服务器环境信息:Linux dx-xx.xx.xx.xx.aiaas.cn 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux。
如果还需要什么信息,大佬请告知,方便定位问题。

收到~~~,问题有进展的消息会及时同步。

大佬,刚才看了官方的issue,对于升级jdk的版本有没有什么建议,具体升到jdk的哪个版本呢,望告知。

您这边的jdk是什么版本?

大佬,这个是我们的容器内使用的jdk版本,看看哪里需要调整的。

@liukan 目前问题是什么,如果内存用量在一定范围内变化,不影响线上服务,其实不用太纠结系统是怎么运作的。

我看了 issue Confused with method getMemUsage() in LinuxBrokerHostUsageImpl.java · Issue #16564 · apache/pulsar · GitHub

说是 org.apache.pulsar.broker.loadbalance.impl.LinuxBrokerHostUsageImpl 这能力类里面的getMemUsage() 方法的问题,会导致有统计不准确的情况,就是想知道问题的根本原因,并想尝试找到解决思路,目前苦于没有头绪。请大佬指点迷津,排除我们的困惑,为啥会出现堆内存在一段时间内波动性比较频繁的原因,周末观测了一下,问题还是存在。

你们业务上数据量有没有周期性的变化?比如数据吞吐量指标同期的变化情况。

首先能确定的是现在的问题是监控看起来不符合预期,但是现网业务(生产消费端)其实没有影响平稳运行对不对?

第一,我们的业务量topic现在基本是稳定的,业务使用topic都由我们服务端这边接入,为了控制topic的数量,且每一个topic都对其namespace的subscripiton的数量做了限制。流量的话基本所有namespace下的总流量不超过100Kb(目前),现网的生产消费其实没有太大的影响。但想知道问题原因,担心的问题是后续随着业务的接入,topic的不断增加,这个内存的波动性更大,极限情况会导致OOM,导致业务不可用。

1 Like

目前,查看指标发现了这个指标异常。

Would you please try JDK 17 to see whether this issue still exists? Open JDK 11 doesn’t work well with docker in getMemUsage() method.

Hi, @liukan 请问咱们的消息场景是什么样的。
对于堆外内存的占用,多出现在以下两个场景,可以对应排查下:

  1. 大量重连的连接
  2. 大量延迟消息

@liudezhi2098 刘老师,最近也在排查业务方代码的问题,发现业务客户端在频繁的创建PulsarClient对象,每次创建一个生产者就去创建这个对象,请问下,内存的频繁升高回落跟业务端频繁创建连接是否有关系?如图,这个是最近几个月的active_connection的情况:

会有一定的关系,建议优化业务代码,减少这种操作之后,看看现象。