Java 异步api的Cpu利用率非常高

Java 异步api的Cpu利用率非常高,java,amazon-web-services,executorservice,Java,Amazon Web Services,Executorservice,我有一个api,用于在DynamoDB中存储数据, 我正在使用谷歌的ListingExecutor服务提交作业,最终将数据发送到DB。但是cpu的利用率非常高,我无法调试原因 代码如下: @Timed(AuditConstants.CRITICAL_TIMER_PREFIX + "sendMessage") public void save(Audit audit) { Callable callable = new CallableResult(auditRepository,audi

我有一个api,用于在
DynamoDB
中存储数据, 我正在使用谷歌的ListingExecutor服务提交作业,最终将数据发送到DB。但是
cpu
的利用率非常高,我无法调试原因

代码如下:

@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);
}
对于1300 tps的R3节点(c4x大型),CPU利用率高达70%

响应时间非常低,约为20ms

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


谢谢

您可以按以下方向尝试:

  • 检查线程内的工作是否过多
  • 查看数据库操作执行时间是否过长,或者是否占用CPU(如果在同一节点上)

  • 看一看虚拟机快照,试着找出哪个线程占用更多的CPU

  • 或者您的作业计划以非常高的频率运行,导致创建太多线程


  • 在我看来,这似乎是您的DB操作造成的。

    CallableResult
    类中是什么?请共享代码。@VinayPrajapati已更新,您还可以共享visualvm快照吗?问题确实出在数据库操作上,服务器没有提供太多的请求。我们必须增加cpu核心。
    @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);
            }
        }