Я запускаю экземпляр Apache Tomcat (5.5) на платформе Windows 2008. Я думаю, что вижу проблему, связанную с одновременным доступом / блокировкой файлов.
Когда количество одновременных HTTP-потоков превышает значение по умолчанию (150), я вижу (с помощью инструмента мониторинга сайта) увеличивающееся количество «неестественных» задержек при обслуживании некоторого статического контента (.js .gif .png и т. Д.). Под этим я подразумеваю, что серверу требуется 20 секунд плюс до начала отправки или 30 секунд для обслуживания небольшого (2 КБ) файла.
Когда Tomcat занят (обслуживает более 300 потоков), загрузка ЦП в среднем составляет около 50-60%, а использование диска составляет около 10-30 Мбит / с.
Могу ли я использовать какие-либо инструменты для Java, чтобы установить, так ли это? Может ли Tomcat APR / Apache Native Library решить эту проблему?
В качестве альтернативы, есть ли еще что-нибудь, на что я должен обратить внимание?
Скриншот инструмента анализа сайта:
Tomcat 7 поддерживает обслуживание статических файлов вне WAR. Видеть Вот (пункт 4.) Вы пробовали это?
Можете ли вы подтвердить, что такую задержку генерирует Tomcat (например, используя журнал доступа Tomcat)? Нетрудно сопоставить медленно загружаемый файл с записью в журнале доступа на стороне сервера.
Что делают потоки HTTP во время теста? Было бы замечательно выгрузить следы стека, когда это происходит. Если вы видите, что загрузка какого-либо ресурса занимает слишком много времени, просто выполните дамп и найдите виновный поток (с настроенным журналом доступа вы можете распечатать имя потока).
Установите веб-сервер apache перед tomcat и отправляйте изображения и js оттуда. Направьте остальной трафик на tomcat через настройки прокси или ajp.