qq_42776318 2021-09-15 09:45 采纳率: 0%
浏览 42
已结题

librdkafka 1.8.0回调后,内存无法清除,导致内存泄漏严重,且CPU占用较高

GitHub下载了librdkafka 1.8.0代码,使用example程序的producer.c文件进行测试,dr_msg_cb回调函数内标识会自动清空rkmessage,但是测试发现并没有自动清掉。

/*
    每条消息调用一次该回调函数,说明消息是传递成功(rkmessage->err == RD_KAFKA_RESP_ERR_NO_ERROR)
    还是传递失败(rkmessage->err != RD_KAFKA_RESP_ERR_NO_ERROR)
    该回调函数由rd_kafka_poll()触发,在应用程序的线程上执行
 */
static void dr_msg_cb(rd_kafka_t *rk,
                      const rd_kafka_message_t *rkmessage, void *opaque){
        if(rkmessage->err)
            fprintf(stderr, "%% Message delivery failed: %s\n", 
                    rd_kafka_err2str(rkmessage->err));
        else
            fprintf(stderr,
                        "%% Message delivered (%zd bytes, "
                        "partition %"PRId32")\n",
                        rkmessage->len, rkmessage->partition);
        /* rkmessage被librdkafka自动销毁*/
}

从网上看有人使用rd_kafka_message_destroy(rkmessage),librdkafka 1.7.0版本的试了下并没有用,librdkafka 1.8.0版本的会导致coredump,猜测应该是不需要手动释放的,查了源代码也没发现具体是在哪个函数里执行的释放操作。现在的情况是,因为没有释放,导致内存逐渐增加,CPU也是慢慢的升高,等升高到5%后就保持在这个水平,但是内存还是在不断增加,所以猜测应该是内存一直没有释放掉。
操作系统是aix 7.1(linux的商用版本),安装librdkafka是没问题的,编译和kafka发送都是成功的,不清楚哪个阶段出现了问题,请问下有没有遇到这个情况的,十分感谢

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-09-17 09:55
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 9月23日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题