canal icon indicating copy to clipboard operation
canal copied to clipboard

请问有没有Canal内存配置相关的原则或最佳实践?

Open mindops opened this issue 6 years ago • 10 comments

Question

服务器配置:4核16G JVM 配置堆的大小为14G,即 -Xmx14336 Canal版本:1.1.3 Canal的配置: canal.instance.memory.buffer.size=1024 canal.instance.memory.buffer.memunit=1024 canal.instance.parser.parallelThreadSize = 4 运行一段时间后就会内存溢出:

com.alibaba.otter.canal.parse.exception.CanalParseException: java.lang.OutOfMemoryError: Java heap space
Caused by: java.lang.OutOfMemoryError: Java heap space

如果将canal.instance.memory.buffer.size配置为512,客户端就拿不到日志,MySQL的Binlog Dump线程一直处于“Writing to net”状态,不知道是什么原因。 看了一些文章,对Canal的内存配置还是没有特别清晰,请问Canal的内存如何配置才不会OOM,有没有什么原则和相关最佳实践可以分享?

谢谢各位~

mindops avatar Apr 14 '19 16:04 mindops

你配置了几个instance?

agapple avatar Apr 15 '19 15:04 agapple

@agapple 你好,就配置了一个instance

mindops avatar Apr 15 '19 16:04 mindops

你这个感觉有点奇怪啊。我现在用的是2核4G的机器,2个instance,canal.instance.memory.buffer.size用的是默认的 16 * 1024,也没有出现OOM的情况。你这边能再给一点 OOM的异常栈或者GC方面的日志来判断一下吗?

SwaggyQ avatar Apr 16 '19 08:04 SwaggyQ

我也想调大来着, 我服务器250G内存, 30几个instance, JVM 配置堆的大小为8G canal.instance.memory.buffer.size = 65536. 也经常报ava.lang.OutOfMemoryError: Java heap space 后来我就干脆都改回默认配置了

Fanduzi avatar Apr 16 '19 13:04 Fanduzi

我将物理内存调大到了32G,堆配置到了24G,目前稳定运行。过两天我再测试下,然后把结果发上来

mindops avatar Apr 18 '19 16:04 mindops

关于内存溢出的问题,今天突然想到一个问题: 如果一个MySQL实例里有多个数据库,如test1,test2,test3,但是canal实例里只配置消费(canal.instance.filter.regex)某一个数据库(schema)的日志,如test1,那canal接收到其他的数据库的binlog,会如何处理,是直接忽略掉吗?

mindops avatar May 05 '19 17:05 mindops

mark,同出现内存一直在涨的问题,一个服务跑一个instance,用的group-instance.xml模式连50个分库,12G的heap一天就满了

zDemon avatar Oct 13 '22 16:10 zDemon

可能是大事务的一行binlog太大,导致canal的oom

lastboy1228 avatar Jan 06 '23 06:01 lastboy1228

我的服务器也是四核16G,Xmx是2g,昨天update了一下数据库18000条,我监测后台发现2-3秒同步固定的32条数据。想知道怎么解决这个问题。

LI8888wdqwe avatar Jun 07 '24 02:06 LI8888wdqwe

而且你的服务器配置:4核16G JVM 配置堆的大小为14G,不会内存不够用吗,请问不用给其他服务内存吗

LI8888wdqwe avatar Jun 07 '24 02:06 LI8888wdqwe