---
title: OBHighWatermarkMonitor 因目标端 OceanBase 数据库内存或 CPU 不足导致写入阻塞-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OBHighWatermarkMonitor 因目标端 OceanBase 数据库内存或 CPU 不足导致写入阻塞相关的常见问题和使用技巧，帮助您快速解决 OBHighWatermarkMonitor 因目标端 OceanBase 数据库内存或 CPU 不足导致写入阻塞的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# OBHighWatermarkMonitor 因目标端 OceanBase 数据库内存或 CPU 不足导致写入阻塞

更新时间：2023-12-19 09:16

适用版本： V4.2.x、V4.1.x 内容类型：Troubleshoot  

本文为您介绍 OBHighWatermarkMonitor 因目标端 OceanBase 数据库内存或 CPU 不足导致写入阻塞的解决方法。

## 适用版本

适用于 OceanBase 迁移服务（OceanBase Migration Service，OMS）V4.1.0 及之后版本。

## 问题描述

数据写入 OceanBase 数据库时，出现 `OBHighWatermarkMonitor` 相关 WARN 日志，RPS 跌至 0。

## 问题原因

因目标端 OceanBase 数据库内存或 CPU 不足导致写入数据阻塞，`OBHighWatermarkMonitor` 相关 WARN 日志 如下。

| 报错 | 描述 |
| --- | --- |
| [OBHighWatermarkMonitor]Detect free cpu percent [{}] < [{}(config)] | 表示 CPU 超过预期值。 |
| [OBHighWatermarkMonitor]Detect free memory percent [{}] < [{}(config)] | 表示内存超过预期值。 |
| [OBHighWatermarkMonitor] pausing for the minimum free memory limitations, sleep {} mill | 表示写入正在被阻塞。 |
| [OBHighWatermarkMonitor]Meet SQLException code: {} | 表示可能是由于 SQL 执行异常导致阻塞（权限异常及查询表异常不会阻塞）。 |
| [OBHighWatermarkMonitor]Failed to check ob status. | 表示可能是由于程序内部原因阻塞。 |

首先需要确定 OceanBase 数据库是否处于高负载状态。如果关闭 OceanBase 数据库防导爆功能，可能会导致用户使用该目标端租户或者集群出现问题。如果处于一直转储的状态，对于写入性能也不能有所提高。

## 解决方法

如果确认目前报错阻塞写入不合理（例如，因为程序问题导致阻塞或目标端 OceanBase 数据库比较空闲等），您可以通过更改配置项来修改阻塞阈值或关闭阻塞能力。需要修改的配置项如下：

- `sink.obFreeMemoryMin`：表示运行时允许的最小空闲内存，默认值为 20，表示当 OceanBase 数据库内存的使用率达到 80% 以上时开始阻塞。运行调整值 0 - 100，如果调整为 0，则表示不限制。
 - `sink.obFreeCpuMin`：表示运行时允许的最小空闲 CPU，默认值为 0。202307 之前的版本中默认值为 10，表示当 OceanBase 数据库的 CPU 使用率达到 90% 以上时开始阻塞。运行调整值 0 - 100，如果调整为 0，则表示不限制。
 - 202307 之后发布的版本中新增 `sink.highWatermarkQueryIntervalSec`，表示查询 CPU 和内存的间隔，单位为秒，默认值为 1 秒（旧版本的默认值为 5 秒）。

下表为相关 Metrics 信息。

| 参数 | 描述 |
| --- | --- |
| ob_free_memory | 目前目标端 OceanBase 数据库的内存空闲率。 |
| ob_free_cpu | 目前目标端 OceanBase 数据库的 CPU 空闲率。 |
| paused_time_ms | 每秒因为水位限制停止多少毫秒。 |
| paused_total_time_ms | 从项目运行开始至当前时间，因为水位限制停止多少毫秒。 |
| ob_watermark_detect_times | 水位检测总次数，重启项目会置为 0。 |
| ob_exceed_mem_high_watermark_times | 水位检测时，内存超出水位总次数，重启项目会置为 0。 |
| ob_exceed_cpu_high_watermark_times | 水位检测时，CPU 超出水位总次数，重启项目会置为 0。 |

上一篇

[OMS 全量迁移触发防爆阀值，速度降为 0，链路暂停](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000280772)

下一篇

[Checker 组件缺失 metrics.log 时如何查看历史 RPS 等信息](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000280774) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
