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

Как оптимизировать производительность SSL в Tomcat 6

Мы запускаем Tomcat 6 на слайсе Ubuntu 2 ГБ на slicehost.com

Fwiw JSP-приложения - Open Clinica 3.1. Я реализовал SSL практически по книге, как вы можете видеть:

   <Connector port="8443"  
           scheme="https"   SSLEnabled="true"
           keystorePass="XXXXX" keystoreFile="XXXXX" 
    maxKeepAliveRequests="0"
    sessionCacheSize="0" sessionTimeout="0"  compression="on"   maxThreads="500"
    clientAuth="false"  sslProtocol="TLS" />

Проблема в том, что Java-приложение Open Clinica выполняет большое количество HTTP-запросов для создания страницы - с помощью инструментов разработчика Chrome я могу увидеть от 70 до 80 запросов для типичной страницы.

Когда вы добавляете дрожание руки SSL к каждому запросу, дополнительная сетевая задержка просто убивает время ответа приложения. FWIW - клиентские пользователи находятся в Израиле, Европе и США, поэтому вариант запуска локального сервера рядом с пользователями на самом деле невозможен. Я знаю, что, поскольку slicehose находится в США - задержка в сети в Израиле низкая, но я чувствую, что, поскольку производительность HTTP сервера была приемлемой или хорошей, мы должны добиться большего.

В попытке свести к минимуму рукопожатия ssl - я определил неограниченные sessionCacheSize и SessionTimeout, как видно из приведенного выше определения соединителя.

Однако, когда я запускаю ssldump на стороне клиента, я все еще вижу много подтверждений связи, которые, кажется, предполагают, что Tomcat фактически игнорирует эти параметры.

Сервер не перегружен - при 5 одновременных пользователях имеется около 100 МБ свободной памяти и практически нет подкачки.

Подтверждение связи SSL для каждого ресурса является верным признаком того, что HTTP сохранить жизнь функциональность не работает.

При использовании keep-alive для TCP-соединения выполняется одно подтверждение SSL, после чего через одно соединение можно запросить несколько ресурсов. Современные браузеры любят открывать более одного TCP-соединения, чтобы избежать узких мест на медленно загружаемых ресурсах, поэтому вы все равно будете видеть несколько рукопожатий, но определенно меньше, чем при отключенном keep-alive.

maxKeepAliveRequests="0" отключает keep-alive, я считаю (на самом деле я не могу найти документацию о том, что делает 0; 1 отключает keep-alive, а -1 не устанавливает ограничений - я предполагаю, что 0 также является эффективным отключением).

Если вы намеревались отключить сохранение активности, я бы рекомендовал пересмотреть; если вы намеревались установить неограниченное значение, измените значение этого параметра на -1.

Keep-alive, очевидно, является самым большим преимуществом, которое вы получите, но если вам все же нужно уменьшить задержку, вы должны убедиться, что вы используете собственный коннектор APR.

http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Connector Comparison

Я бы предложил использовать обратный прокси-сервер Apache с разъемом AJP на передней панели. Поместите SSL в Apache и подключитесь к Tomcat в виде открытого текста по частной ссылке (например, localhost).

Используйте Apache для того, в чем он хорош (веб-сервер с множеством необычных опций), и Tomcat для того, в чем он хорош (приложения Java).