ClickHouse报错:DB::Exception: Memory limit (total) exceeded

问题描述

当使用Flink向ClickHouse批量持续写入数据时,遇到如下的错误信息:

Caused by: java.sql.SQLException: Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 6.86 GiB (attempt to allocate chunk of 4295130 bytes), maximum: 6.86 GiB (version 20.8.3.18)
, server ClickHouseNode [uri=...]...

问题分析

从出错信息判断,应该是批量写入ClickHouse时内存不够引起的内存溢出错误。

实际上,不单在写入ClickHouse时有可能遇到这样的问题,在对ClickHouse执行查询(特别是聚合查询)时,也有可能会遇到这样的问题。

原因是,默认情况下,ClickHouse会限制使用的内存量,包括服务器使用的内存量和每个用户使用的内存量。这可以通过参数设置来调节。

问题解决

可通过调整扩大可用内存阈值,来解决这个问题。解决步骤如下(以root账户操作):

1)找到ClickHouse的配置目录。在默认安装下,使用如下命令:

# cd /etc/clickhouse-server/

2)打开该目录的下的config.xml配置文件,设置ClickHouse服务器可使用的内存比率。在文件中找到max_se ......

......

抱歉,只有登录会员才可浏览!会员登录


《Spark原理深入与编程实战》