开发者社区> 问答> 正文

启动客户端之后,cpu使用率高

启动客户端连接canal server的时候,cpu中对应的java进程使用率瞬间升高到40% - 50%之间,这个似乎不太正常吧,我看client demo里面使用了while 无限循环,这个可能是cpu飚高的原因吧,难道客户端是通过不断轮训服务端获取数据的吗? 客户端代码如下: CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(canalServerIp, canalServerPort), serverDestination, canalUserName, canalPassword);

new Thread(
        () -> {
            while(true){
                try{
                    connector.connect();
                    connector.subscribe(monitorDatabase+"\\..*");
                    while(true){
                        Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据
                        long batchId = message.getId();
                        int size = message.getEntries().size();
                        if (batchId != -1 && size != 0) {
                            try{
                                processData(message.getEntries());
                                connector.ack(batchId); // 提交确认
                                //Thread.sleep(500);
                            }catch (Exception e){
                                e.printStackTrace();
                                connector.rollback();//如果发生异常,则需要回滚上次读取到的binlog位置
                            }

                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    logger.error("和canal Server交互出现异常");
                }finally {
                    connector.disconnect();
                }
            }
        }
).start();

下面的是我机器的性能参数,请主要关注对应的java进程

Processes: 346 total, 6 running, 340 sleeping, 2038 threads 15:09:09 Load Avg: 5.62, 5.26, 5.03 CPU usage: 58.75% user, 19.6% sys, 22.18% idle SharedLibs: 185M resident, 57M data, 27M linkedit. MemRegions: 78596 total, 7644M resident, 207M private, 1706M shared. PhysMem: 16G used (2031M wired), 136M unused. VM: 1565G vsize, 1110M framework vsize, 0(0) swapins, 0(0) swapouts. Networks: packets: 38214974/2633M in, 38184606/2541M out. Disks: 284609/7890M read, 251982/9950M written.

PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP 3399 mdworker 0.1 00:00.06 4 2 44 3252K+ 0B 0B 3399 3398 mdworker 0.0 00:00.06 4 2 44 3272K 0B 0B 3398 3397 mdworker 0.1 00:00.06 4 2 44 3260K+ 0B 0B 3397 3391 com.apple.au 0.0 00:00.01 2 2 16 972K 0B 0B 3391 3353 Google Chrom 0.0 00:00.10 15 1 113 13M 0B 0B 526 3347 java 25.9 01:28.67 144/2 1 326 1327M+ 0B 0B 665 3344 top 4.1 00:23.44 1/1 0 30 3668K+ 0B 0B 3344 3333 java 38.9 03:29.43 30 1 98 260M 0B 0B 665 3322 java 48.9 04:08.49 33/1 1 104 606M 0B 0B 3312 3295 tail 0.0 00:00.14 1 0 10 360K 0B 0B 3295

另外,我的版本是 v1.0.24

原提问者GitHub用户cjj137783

展开
收起
绿子直子 2023-05-09 10:11:51 67 0
1 条回答
写回答
取消 提交回答
  • client启动之后,服务端就会开始解析工作

    原回答者GitHub用户agapple

    2023-05-09 19:40:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
RDS SQL Server CPU高使用率性能优化 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载