Приложение замедляется (ИНОГДА) в часы пик, работает на tomcat с обратным прокси-сервером от сервера apache, развернуто на AWS

Приложение замедляется (ИНОГДА) в часы пик, работает на tomcat с обратным прокси-сервером от сервера apache, развернуто на AWS

Просто для предисловия: я разработчик программного обеспечения, и поначалу никто не понимал, что происходит, поэтому я провел небольшое тестирование и почитал, и хотел бы помочь своим коллегам решить эту проблему.

Проблема:

Проблема в том, что в часы пик сервер становится настолько медленным, что соединение прерывается в браузерах, таких как Chrome (через 30 секунд), но сервер все еще работает и может обслуживать страницы примерно через 100 секунд (проверено с помощью insomnia). Я воспроизвел проблему abs ...на производственном сервере, и она как-то связана с количеством одновременных запросов, вероятно, вызванных нашей конфигурацией сервера Apache.

Больше информации:

При разработке мы запускаем tomcat8 локально, и я тестировал его с " abs -c 200 -n 2000 https:/[link]", и время выполнения нормальное. Но при тестировании производственного сервера, даже с 50 одновременными запросами, замедление API, которое я тестировал, было значительным: с 800 мс по умолчанию до 27846 мс.

Что было опробовано и более подробно:

У нас запущена java melody, и я подумал, что, возможно, мы достигли предела потоков в потоке выполнения tomcat, поэтому мы увеличили количество потоков до 500 с 200 по умолчанию (это было до того, как я провел тестирование). При запуске вышеупомянутого теста я вижу, что занятые потоки достигают 50 с чем-то из 500 (работает в продакшне, так что некоторые люди на самом деле также используют программу), но нет, она все еще сильно замедляется.

В пиковые моменты я вижу, что у нас около 1000 http-сессий, но потоки, память и процессор даже близко не приближаются к 100%. Просто чтобы убедиться, что мы обновили сервер до наилучшего, но, конечно, это не то. Мы используем SQL, но сервер SQL тоже не пиковый, так что я сомневаюсь, что проблема в этом.

Я знаю, что не стоит подражать аргументам JVM, но, глядя на похожие проблемы, я пробовал добавлять "-XX:ReservedCodeCacheSize=512M", но это тоже не сработало. Я также пробовал увеличить acceptCount до 1000 в server.xml, но это все еще не работает.Стоит ли мне отменить эти изменения?Я не заметил никаких изменений в производительности, и, насколько я могу судить по документации, можно оставить все как есть.

У нас есть странная функция, когда веб-приложение переходит на домашнюю страницу после некоторого времени бездействия, а затем продолжает обновлять домашнюю страницу каждые xx минут. Я думаю, что это плохо для производительности, особенно если у пользователя открыто много вкладок, и они начинают обновляться, возможно, это не то, что вызывает наши проблемы, но стоит упомянуть.

Следующее, что я попробую сегодня, это поиграться с аргументами сервера Apache. Я читаюруководство по настройкеи MaxRequestWorkers / MaxClients выглядит как что-то, что может объяснить то, что мы испытываем. ЦитатаЕсли значение этой директивы слишком низкое, Apache неэффективно использует имеющееся оборудование, что приводит к пустой трате денег и длительным задержкам загрузки страниц в часы пик.

Буду признателен за любые советы. Надеюсь, это просто сервер Apache, и я смогу хотя бы сделать сервер пригодным для использования сегодня. Есть ли еще какие-то конфигурации, которые могут вызывать это замедление?

решение1

Ваш веб-сервер может быть перегружен из-за слишком большого количества запросов, что фактически эмулирует атаку SlowLoris DOS, пожалуйста, проверьте мойпредыдущий ответпо теме.

Связанный контент