开发者社区> 问答> 正文

docker启动有没有推荐配置(比例)

环境信息

canal version canal.1.1.0 mysql version

问题描述

使用docker 容器3200M canal -server -Xms2048m -Xmx3072m -Xmn1024m -XX:SurvivorRatio=2 -XX:PermSize=96m -XX:MaxPermSize=256m -Xss256k -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC

3306 , EventParser] ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address mysql-c594ae87bd6343ec992b746abff8f418-1.c594ae87bd6343ec992b746abff8f418.addon-mysql.v1.runtimes.marathon.l4lb.thisdcos.directory/11.92.194.122:3306 has an error, retrying. caused by java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) [na:1.8.0_181] at java.lang.Thread.start(Thread.java:717) [na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957) ~[na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1367) ~[na:1.8.0_181] at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) ~[na:1.8.0_181] at com.alibaba.otter.canal.parse.inbound.mysql.MysqlMultiStageCoprocessor.start(MysqlMultiStageCoprocessor.java:120) ~[canal.parse-1.1.0.jar:na] at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:238) ~[canal.parse-1.1.0.jar:na] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181] 2019-03-07 23:21:20.594 [destination = example , address = mysql-c594ae87bd6343ec992b746abff8f418-1.c594ae87bd6343ec992b746abff8f418.addon-mysql.v1.runtimes.marathon.l4lb.thisdcos.directory/11.92.194.122:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:example[java.lang.OutOfMemoryError: unable to create new native thread 报错

原提问者GitHub用户zhouluoyang0406

展开
收起
古拉古拉 2023-05-08 13:49:54 125 0
2 条回答
写回答
取消 提交回答
  • 按照你自己的业务诉求进行调整,默认是要求主机或者虚拟机4GB的内存

    原回答者GitHub用户agapple

    2023-05-09 17:48:44
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    根据您提供的信息,您在使用 Docker 容器启动 Canal Server 时,遇到了 OutOfMemoryError 异常,导致无法创建新的本地线程。这个问题可能是由于 Canal Server 的内存配置不足或者 Docker 容器的资源限制导致的。

    针对这个问题,您可以尝试调整 Canal Server 的内存配置,增加可用的堆内存大小和线程数,以提高系统吞吐量和稳定性。具体来说,您可以根据实际情况设置 Canal Server 的内存参数,例如:

    -Xms4g -Xmx4g -Xmn1g -XX:SurvivorRatio=8 -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:/opt/logs/gc.log 在上述配置中,-Xms 表示设置最小堆内存大小,-Xmx 表示设置最大堆内存大小,-Xmn 表示设置新生代内存大小,-XX:SurvivorRatio 表示设置新生代中 Eden 区和 Survivor 区的比例,-XX:PermSize 和 -XX:MaxPermSize 表示设置永久代内存大小,-XX:MaxTenuringThreshold 表示设置对象年龄的最大阈值,-XX:+DisableExplicitGC 表示关闭显式垃圾回收,-XX:+UseConcMarkSweepGC 和 -XX:+UseParNewGC 表示使用 CMS 和 ParNew 垃圾回收器,-XX:+CMSParallelRemarkEnabled 表示开启 CMS 备注处理,-XX:+UseCMSInitiatingOccupancyOnly 和 -XX:CMSInitiatingOccupancyFraction 表示设置 CMS 初始化占用率和触发 CMS 垃圾回收的阈值,-XX:+PrintGCDetails、-XX:+PrintGCTimeStamps 和 -XX:+PrintHeapAtGC 表示开启 GC 日志记录,-Xloggc 表示设置 GC 日志文件路径。

    除了 Canal Server 的内存配置,您还需要检查 Docker 容器的资源限制,以确保容器可以分配足够的内存和 CPU 资源。您可以使用 Docker Compose 或者 Docker Swarm 等工具来管理 Docker 容器的资源分配和限制,以保证系统的稳定性和可靠性。

    希望以上信息能够帮助您解决问题。

    2023-05-08 14:16:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载