Я сталкивался с периодическими всплесками в ответах Rest API, размещенных на Tomcat. Общее время отклика в пределах 2 мс. Но есть некоторые всплески между ними, когда один запрос занимал более 1,5 секунд, эти запросы вызывают тайм-ауты на стороне клиента, поскольку клиент настроен с очень низким таймаутом соединения. Этот всплеск происходит каждые 1 час до 1:30 часа. Нет всплеска ЦП и памяти. Приложение получает данные из Redis, и на машинах Redis также нет скачков. Количество запросов, обрабатываемых в секунду, составляет 500. Пул потоков всегда используется недостаточно. Ниже приведена конфигурация Tomcat.
<Connector port="8080"
connectionTimeout="60000"
maxThreads="500"
minSpareThreads="50"
acceptCount="2000"
protocol="org.apache.coyote.http11.Http11NioProtocol"
useSendfile="false"
compression="force"
enableLookups="false"
redirectPort="8443" />
ОЗУ машины составляет 8 ГБ, а JVM настроена с XMS и XMX как 4 ГБ. Я не использую никаких явных аргументов G C. (Tomcat 9.0.26, Java 11, 4 ядра, 8 ГБ ОЗУ)
Я подозреваю, что G C может быть причиной проблемы, но поскольку я не вижу скачков ни в процессоре, ни в памяти Я понятия не имею, почему это происходит. Может ли кто-нибудь помочь мне, подкинув несколько идей по решению этой проблемы?