# [Known-Issues]-Drainer-启动后-OOM-或卡住，端口没有打开

## Key Words

Drainer, OOM, 卡住, OOM

## Description

现象1：Drainer 启动后内存占用一直上涨，内存不足时可能触发 OOM；

现象2：Drainer 启动后端口（默认 8249）长时间没有开启，drainer.log 没有打印最新的日志。

## Root Cause

Drainer 启动过程会获取上游 TiDB 集群执行过的全量 DDL History 以保证数据一致性再开启端口，如果 TiDB 集群运行了很长时间，可能会积累了过多 DDL History，会导致获取 DDL 接口耗时过长，并可能导致 Drainer 内存堆积触发 OOM。

[https://github.com/pingcap/tidb-binlog/issues/978](https://github.com/pingcap/tidb-binlog/issues/978)

## Diagnostic Steps

1. drainer_stderr.log 存在 GetAllHistoryDDLJobs 关键字的 go-routine

2. 上游集群有大量历史 DDL，执行 `curl http://{TiDBIP}:10080/ddl/history` 也会长时间卡住（可能导致 TiDB Server 内存持续上涨并 OOM，建议先将 DDL owner 切换到专用的运维节点再执行）

## Resolution

N/A

## Workaround

扩容 Drainer 内存或开启 Swap 避免 OOM，等待 DDL History 加载完成；

升级 TiDB 集群到 v4.0.x 最新版本，获取历史 DDL 时减少 TiDB 的内存占用。（[https://github.com/pingcap/tidb/pull/12472](https://github.com/pingcap/tidb/pull/12472)）

## Affected Versions

Drainer Version:

< v4.0.x
< v3.0.x
< v2.1.x