2015-07-03 4 views
0

У меня есть Netbeans 8.0.2, установленный на Ubuntu 15.04, который включает контейнер GlassFish 4.1 EE.GlassFish 4.1 Медленный сигнал Servlet от Localhost (NetBeans)

По какой-то причине, после того, как обеспечить мои resolv.conf и hosts файлов были настройки должным образом, доступ динамического контента, такие как servlet который извлекает данные из базы данных SQL, ужасно медленно.

Однако доступ к статическим страницам JSP возвращается менее чем за 1 мс.

Pinging server on 127.0.0.1 или localhost возвращается в 0.038ms или меньше, что следует ожидать, поэтому я не думаю, что проблемы с разрешением DNS, общие с Linux и localhost, здесь виноваты.

Для ударов я загрузил сервер GlassFish 4.1 со своего сайта и установил NetBeans для его развертывания, и получил те же результаты. Кроме того, я также попытался вручную развернуть мои WAR-файлы, что также привело к очень медленному времени отклика от динамического контента/сервлетов.

Что меня за то, что с такой же настройкой и конфигурациями у меня нет таких проблем в Windows.

Так что в итоге:

  • Статическое содержимое рассасывается и реагирует менее 1 мс.
  • Динамический контент через сервлеты ужасно медленный, до 5 минут.

Я действительно смотрел и видел, был ли это мой код. И нет, это не так. Он отлично работает на Windows и Windows Server. Он даже отлично работает, когда сервер находится в CentOS и указывает на него, т. Е. Вы просматриваете URL-адрес, а не через localhost.


Для уточнения, эта проблема возникает даже на сервлеты, которые не обращаются внешние ресурсы, такие как сервлет, что только добавляет несколько строк HTML, или пересылает запрос на статической странице JSP.

+1

Как вы попытались отладить это? Вы можете попробовать добавить отладочные заявления через части вашего кода, которые попадают в запрос, чтобы вы могли видеть, где происходит латентность.Существует большая вероятность того, что это проблема в конце базы данных - либо связь с/из БД, либо сама БД является медленной. – Mike

+0

@Mike Это была первая мысль, которую я имел. Самый простой способ это сделать - создать сервлет, который ничего не делал, кроме добавления нескольких строк HTML на страницу, без доступа к какой-либо базе данных. Результаты были одинаковыми. К сожалению, база данных не виновата. –

ответ

0

Ну

После некоторого обширного копания и профилирования, я нашел решение:

у меня был фильтр, который будет проверять подлинность пользователей и установить кук, который изменяет для каждого запроса (предотвращает CSRF), но используется Java Utils SecureRandom, чтобы ввести безопасный случайный бит информации в алгоритм хэширования MD5 вместе с некоторыми другими преимуществами, чтобы выплеснуть прилично безопасный одноразовый cookie.

Очевидно, что версия CentOS моего производственного сервера уже включает в себя демон haveged, который поддерживает/dev/random entropy.

Проблема в том, что SecureRandom на Linux запрашивает/dev/random и блокирует. Когда энтропии недостаточно, она может подождать до 25 секунд, прежде чем вернуться.

Решение должно было, конечно же, установить демона haveged. Задача решена.

Смежные вопросы