Моя компания недавно переехала в Alfresco как решение для управления контентом. Поскольку часть содержимого является динамической (файл .jsp, включенный в другой файл .jsp, читает карту сайта, опубликованную в формате XML от Alfresco.
и кэширует результат в течение 24 часов) сгенерированные файлы имеют формат .jsp и rsync 'и обслуживаются из нашего контейнера сервлетов Sun Web Server 7.
Каждая страница имеет заголовок, меню и нижний колонтитул, который включен
используя директиву jsp:include
. Насколько я понимаю, когда первый запрос будет сделан на index.jsp
, будет несколько скомпилированных jsps, например index.class
, header.class
,
menu.class
и footer.class
. Требуется, чтобы они компилировались один раз, а контейнер сервлетов проверял на предмет изменения любой из исходных jsps (выдвигаемых Alfresco) каждые x секунд.
Сам веб-сервер настроен (default-web.xml
) для готовности к работе со следующими параметрами в соответствии с рекомендациями Sun docs:
<init-param>
<param-name>development</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>checkInterval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>fork</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>mappedfile</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>suppressSmap</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>classdebuginfo</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
Обратите внимание, что для параметра checkInterval
должно быть установлено значение 60, но это приводит к тому, что веб-сервер не запускается (я не смог выяснить, почему). Неудачный обходной путь для этого
затем установить development
в true, чего я бы хотел избежать.
Контейнер сервлета сконфигурирован со следующими настройками JVM (опять же, как рекомендовано Sun docs):
-server -Xrs -Xmx2048m -Xms2048m -Xmn2024m -XX:+AggressiveHeap -XX:LargePageSizeInBytes=256m -XX:+UseParallelOldGC -XX:+UseParallelGC -XX:ParallelGCThreads=8 -XX:+DisableExplicitGC
Во время тестирования производительности мы видим, что пространство Eden часто увеличивается до 2 ГБ (общий размер нашего статического содержимого составляет примерно 200 МБ, а наш
тестирование против нескольких страниц). Результаты во многих второстепенных коллекциях; быстрое выталкивание объектов в постоянное пространство, и оно никогда не восстанавливается, что приводит к частым частичным сборкам мусора
(Пространство оставшихся в живых также уменьшается с 90 Мб до 2 байтов, и я могу только предположить, что пространство Идена претендует на его собственное - кто-нибудь может подтвердить?). Это наш самый большой вопросительный знак; никто из наших разработчиков
думаю, что это нормальное поведение, но мы не можем объяснить, куда уходит эта память.
Другая проблема, с которой мы сталкиваемся, - это количество потоков. С каждым запросом http, приводящим к созданию нового потока в сервлете, я ожидаю, что он будет расти пропорционально нагрузке (я также думаю, что создается новый поток
также внутри каждого сервлета при выполнении jsp:include
во время выполнения (RequestDispatcher.include()
в скомпилированном родительском jsp). Однако после того, как каждый запрос обслужен, поток должен умереть, и на его месте появляется новый.
Это правильное предположение? Кажется, что количество потоков останавливается и растет независимо от нагрузки.
Любая помощь будет принята с благодарностью.