请问有没有Canal内存配置相关的原则或最佳实践?
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,有没有什么原则和相关最佳实践可以分享?
谢谢各位~
你配置了几个instance?
@agapple 你好,就配置了一个instance
你这个感觉有点奇怪啊。我现在用的是2核4G的机器,2个instance,canal.instance.memory.buffer.size用的是默认的 16 * 1024,也没有出现OOM的情况。你这边能再给一点 OOM的异常栈或者GC方面的日志来判断一下吗?
我也想调大来着, 我服务器250G内存, 30几个instance, JVM 配置堆的大小为8G canal.instance.memory.buffer.size = 65536. 也经常报ava.lang.OutOfMemoryError: Java heap space 后来我就干脆都改回默认配置了
我将物理内存调大到了32G,堆配置到了24G,目前稳定运行。过两天我再测试下,然后把结果发上来
关于内存溢出的问题,今天突然想到一个问题: 如果一个MySQL实例里有多个数据库,如test1,test2,test3,但是canal实例里只配置消费(canal.instance.filter.regex)某一个数据库(schema)的日志,如test1,那canal接收到其他的数据库的binlog,会如何处理,是直接忽略掉吗?
mark,同出现内存一直在涨的问题,一个服务跑一个instance,用的group-instance.xml模式连50个分库,12G的heap一天就满了
可能是大事务的一行binlog太大,导致canal的oom
我的服务器也是四核16G,Xmx是2g,昨天update了一下数据库18000条,我监测后台发现2-3秒同步固定的32条数据。想知道怎么解决这个问题。
而且你的服务器配置:4核16G JVM 配置堆的大小为14G,不会内存不够用吗,请问不用给其他服务内存吗