首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于异步api,Cpu利用率非常高。

对于异步api,Cpu利用率非常高。
EN

Stack Overflow用户
提问于 2019-11-07 06:35:39
回答 1查看 135关注 0票数 1

我有一个api,用于在DynamoDB中存储数据,我使用谷歌的ListeningExecutorService提交作业,最终将数据发送给DB。但是cpu利用率很高,我无法调试其中的原因。

以下是代码:

代码语言:javascript
复制
@Timed(AuditConstants.CRITICAL_TIMER_PREFIX + "sendMessage")
public void save(Audit audit) {
    Callable callable = new CallableResult(auditRepository,auditDataUtils,audit);

    ListenableFuture<Result> future = executorService.submit(callable);

    Futures.addCallback(future, new FutureCallback<Result>() {
        @Override
        public void onSuccess(@Nullable Result result) {
            log.info("Successfully sent audit with uuid {} to Dynamo DB", audit.getAuditId());
        }

        @Override
        public void onFailure(Throwable throwable) {
            log.info(ERROR_WHILE_SENDING_THE_MESSAGE, throwable);
            handleException(audit, throwable);
        }
    });

}

private void handleException(Audit audit, Throwable ex) {

    log.info("Failed talking to Dynamo DB, writing audit with uuid {} to file", audit.getAuditId(), ex);
    producerAuditEventsLogger.logToFile(audit);
}

CallableResult作业

代码语言:javascript
复制
@Override
    public Result call() throws Exception {
        try {
            AuditData auditData = auditDataUtils.getAuditData(audit);
            auditRepository.saveAuditData(auditData);
            return new Result(SUCCESS);
        } catch (Exception e) {
            throw new Exception("There was an error while writing to DB",e);
        }
    }

1300TPS的3个节点(c4x大)的CPU利用率高达70%。

响应时间很短~20 is。

请指导我如何调试,以及建议降低cpu的方法是什么。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-07 07:33:34

您可以尝试以下方向:

  1. 检查您在线程
  2. 中是否做了太多的工作,看看DB操作是否花费了很长时间来执行,还是占用了CPU (如果在同一节点上)。
  3. 查看一下视觉VM快照,并试图找出哪个线程占用了更多的CPU。
  4. 或您的作业计划以非常高的频率运行,导致创建过多的线程。

在我看来,您的DB操作导致了这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58743199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档