启动客户端连接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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。