Назад | Перейти на главную страницу

Java: Tomcat медленно обслуживает статические файлы?

Я запускаю экземпляр 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.