Если вы используете AWS EC2 экземпляр (скажем, t2.large), сколько потоков вы установите в своем пуле потоков
Я думаю, что это может быть одним из возможно root причина проблем, с которыми вы сталкиваетесь. Использование одного ThreadPool
, или, точнее, ExecutionContext
, который обертывает некоторый ExecutorService
(например, FixedThreadPoolExecutorService
), считается плохой практикой, поскольку один и тот же экземпляр EC
внутри приложения может использоваться для операций блокировки, таких как база данных. доступ - например, MySql в вашем случае, что в конечном итоге приведет к блокировке всего потока и проблемам с производительностью в других частях приложения, таких как обработка нового соединения или рендеринг ответа.
Что вам нужно будет сделать, это использовать различные EC
экземпляры для блокирующих и неблокирующих операций - назовем их frontend EC
(для неблокирующих) и backend EC
(для блокирующих).
frontend EC
, которые необходимо использовать в просмотр и уровни обслуживания (контроллеры API, бизнес-логика c и т. д. c.); backend EC
, которые необходимо использовать на уровне приложений DAO или при любых возможных блокировках;
Способ распределения ресурсов между этими двумя EC
действительно зависит от контекста. Например, вы можете начать с 80% потоков для frontend EC
и других 20% backend EC
, а затем продолжать настройку, пока не получите желаемый результат производительности.
Но в целом вопрос, который вы задаете, зависит от много контекста - там нет серебряной пули, как обычно в машиностроении.
Надеюсь, это поможет!