obcdc 处理约200万条dml后内存使用量过大达8G

【 使用环境 】测试环境
【 其他组件 】obcdc mysql版
【 使用版本 】4.2.1
【问题描述】CDC进程在读取180万条dml后,内存占用达到8G左右,超过限制被kill。配置文件中已设置 memory_limit=2G。
【复现路径】相关代码

IObCDCInstance *obcdc_instance = init(1730095200);
    long nth = 0;
    while (true) {
        Record *record = next(obcdc_instance);
        if (record != NULL) {
            cout << "parsedOK: " << record->parsedOK() << endl;
            if (record->recordType() == EINSERT) {
                auto *record_ = (LogRecordImpl *)record;
                unsigned int count;
                const BinLogBuf *values = record_->filterValues(count);
                char *buf = values[1].buf;
                cout << "tranid: " << buf << endl;

                ITableMeta *tableMeta = NULL;
                if (OB_SUCCESS != record->getTableMeta(tableMeta)) {
                    LOG("[ERROR] get_table_meta failed");
                } else {
                    nth += 1;
                    cout << "nth: " << nth << endl
                        << "db: " << record->dbname() << endl
                         << "table: " << tableMeta->getName() << endl
                         << "timestamp: " << record->getTimestamp() * 1000000 + record->getRecordUsec() << endl;

                }
            }
            obcdc_instance->release_record(record);
        }
    }

【附件及日志】

1 个赞

麻烦发下包含报错时段的日志文件

没有报错日志,是在容器中启动的CDC,限制了最大内存使用8G。触发这个限制后,进程自动被杀死。

可以查看下容器日志吗

docker logs -f <容器名 or ID>

docker logs 内容是空的,我是使用clion在容器里启动的程序,clion输出的信息是:
进程已结束,退出代码为 137 (interrupted by signal 9:SIGKILL)

获取不到日志可能不好排查,我联系这块的老师看下,有进展回复你

好的,我理解程序的主流程应该是通的,可能是存在内存泄漏或者没控制内存的使用量。另外,我运行cdc开发工具包自带的 obcdc_tailf 工具也会出现类似的内存持续增长被杀的问题。