je la configuration suivante dans mon application Boot Spring:application de démarrage de printemps consommer tous les cpu quand AsyncTaskExecutor est configuré
@Configuration
@EnableAsync
@Slf4j
public class AsyncConfig {
private static final int BUFFER = 1024;
@Bean
public AsyncTaskExecutor singleThreadAsyncTaskExecutor(Environment env) {
RingBufferAsyncTaskExecutor rbAsyncExecutor = new RingBufferAsyncTaskExecutor(env);
rbAsyncExecutor.setName("rb-executor");
rbAsyncExecutor.setBacklog(BUFFER);
rbAsyncExecutor.setProducerType(ProducerType.SINGLE);
rbAsyncExecutor.setWaitStrategy(new YieldingWaitStrategy());
log.info("Async task executor loaded");
return rbAsyncExecutor;
}
}
quand je le lance, la frappe utilisation cpu 100% (parfois 100 quelque chose):
enquête avec visualvm, je vois ce
mais, lorsque je supprime l'instanciation de AsyncTaskExecutor
, l'utilisation du processeur passe à 0,4% et le visualvm me montre à peine 1% de l'utilisation du processeur.
J'ai trouvé ce problème en le déployant avec docker, j'ai vu mon utilisation de l'hôte frapper le plafond.
J'ai essayé de réduire la taille du tampon (c'était 2048) à 1024 mais rien n'a changé.
Sans ce bean, mes services @Async
ne fonctionnent pas de manière asynchrone. (No TaskExecutor bean found for async processing
)