Мы используем контейнер 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.Где узкое место и как его проанализировать?