Tôi có cấu hình sau đây trong ứng dụng Boot mùa xuân của tôi:xuân tiêu thụ tất cả các cpu khi AsyncTaskExecutor được cấu hình
@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;
}
}
khi tôi chạy nó, việc sử dụng cpu lượt truy cập 100% (đôi khi 100 gì đó):
tra với VisualVM, tôi thấy điều này
nhưng, khi tôi xóa bản sao của AsyncTaskExecutor
mức sử dụng CPU giảm xuống 0,4% và hình ảnh hiển thị cho tôi hầu như không sử dụng CPU 1%.
Tôi đã tìm thấy vấn đề này trong khi triển khai nó với docker, tôi thấy việc sử dụng máy chủ của tôi đã tăng trần.
Tôi đã thử giảm kích thước bộ đệm (nó là 2048) xuống 1024 nhưng không có gì thay đổi.
Nếu không có bean này, các dịch vụ @Async
của tôi không hoạt động không đồng bộ. (No TaskExecutor bean found for async processing
)