项目场景:
设备:腾讯云轻量级服务器 2c4g
系统:CentOS 7.6 64bit
涉案人员:rabbitmq、canal1.1.16
背景:正在搭建服务器环境
问题描述
启动项目,按照原来的设想是:canal监听mysql,从而将mysql中变更的数据交给rabbitmq消费,实现redis和elasticsearch对mysql的数据同步
结果发现当我改变数据时,redis和elasticsearch数据无改变
首先怀疑是rabbitmq出问题了,我确认了一遍配置文件,然后放开了15672端口远程查看,重复一遍流程,确认不是rabbitmq问题
这下破案了,我去查看canal的状态
我此时以为是我没启动canal,于是再次启动并查看canal状态
发现canal就是启动不了
遇到这种情况当然是先看错误日志了
日志内容
翻译一下:Java运行时环境没有足够的内存来继续运行,本机内存分配(mmap)映射2147483648字节提交预留内存失败。
原因分析:
官方给出的可能的问题原因:
1、系统的物理内存或交换空间不足
2、进程运行时启用了CompressedOops, Java堆可能阻塞了本机堆的增长
我这里的原因是canal默认设置的java堆大小和堆栈大小实在是太大了,内存空间不足。
解决方案:
官方给出的可能的解决方案:
1、减少系统的内存负载
2、增加物理内存或交换空间
3、检查交换存储是否已满
4、减少Java堆大小(-Xmx/-Xms)
5、减少Java线程的数量
6、减少Java线程栈大小(-Xss)
7、使用-XX:ReservedCodeCacheSize=设置更大的代码缓存
8、该输出文件可能被截断或不完整。
我这里的解决方案是减小java堆大小和堆栈大小
找到startup.sh并打开
修改里面的xms和xmx,调整为合适的大小
结果
完美结束,项目运行正常