У меня есть API, который используется для хранения данных в DynamoDB
, я использую Google ListeningExecutorService для отправки заданий, которые в конечном итоге отправляют данные в БД. но использование 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);
}
CallableResult job
@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);
}
}
Загрузка ЦП достигает 70% для For 3 узла (c4x большой) для 1300 т / с.
Время отклика очень мало ~ 20 мс
Пожалуйста, помогите мне, как я могу отладить, и каковыРекомендуемые способы понижения процессора.
Спасибо