Как разумно установить размер ThreadPool в Spring Boot? - PullRequest
1 голос
/ 24 сентября 2019

Мы используем контейнер Tomcat по умолчанию при весенней загрузке.Мы устанавливаем максимальный поток равным 3000.

server:
  port: 9805
  tomcat:
    max-threads: 3000

Кроме того, мы использовали WebAsyncTask в Controller для асинхронной обработки запроса, определяя другой пул потоков:

ExecutorService executorService = 
   new ThreadPoolExecutor(20, 600, 30, TimeUnit.SECONDS, new LinkedBlockingQueue(1200));
AsyncTaskExecutor taskExecutor = new ConcurrentTaskExecutor(executorService);

public WebAsyncTask<V> execute(final AsyncTask<V> asyncTask) {
        WebAsyncTask<V> webAsyncTask = new WebAsyncTask(this.requestTimeout, this.taskExecutor, asyncTask);
        webAsyncTask.onTimeout(new Callable<V>() {
            public V call() {
                return asyncTask.timeout();
            }
        });
        return webAsyncTask;
    }

далееболее того, мы использовали другой пул потоков в Service для параллельного извлечения некоторой информации:

private ExecutorService executorService = new ThreadPoolExecutor(10, 200, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(10000)
            , new BaseThreadFactory("info-pool"));

наконец, мы используем Apache HttpClient для извлечения некоторых данных:

HttpRequest httpRequest = new HttpRequest();
httpRequest.setMaxConnPerRoute(200);
httpRequest.setConnectionRequestTimeout(500);
httpRequest.setConnectTimeout(500);
httpRequest.setMaxConnTotal(500);
httpRequest.setSocketTimeout(1000);

QPSсистема всего 200-300.Где узкое место и как его проанализировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...