Tomcat7 запускается слишком поздно в Ubuntu 14.04 x64 [Digitalocean]

43

Я использую digitalocean и пытаюсь установить и запустить tomcat на ubuntu, но, к сожалению, я не могу этого сделать. (создал новые капли и попробовал 10 раз)

1GB Ram 30GB SSD Disk Amsterdam 2 Ubuntu 14.04 x64

Когда я запускаю tomcat, он говорит: "Tomcat начал". Но я не могу получить доступ к странице из браузера. и. /shutdown.sh возвращает ошибку.

В чем может быть проблема?

Я заметил что-то сейчас. Пока я пишу этот вопрос, отображается страница tomcat. для отображения страницы

потребовалось 28 минут.

catalina.out говорит: INFO: создание экземпляра SecureRandom для генерации идентификатора сеанса с использованием [SHA1PRNG] заняло [1,718,769] миллисекунды.

Вот мои шаги по установке (эти шаги работают на разных vps, но не работают на капельках digitalocean):

Установить oracle jdk

 sudo apt-get install python-software-properties
 sudo add-apt-repository ppa:webupd8team/java
 sudo apt-get update
 sudo apt-get install oracle-java7-installer
 sudo apt-get install oracle-java7-set-default
      java -version
      java version "1.7.0_72"
      Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)

Установить путь Java

      sudo nano /etc/environment
      JAVA_HOME="/usr/lib/jvm/java-7-oracle"
      source /etc/environment
      wget http://ftp.itu.edu.tr/Mirror/Apache/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat-7.0.56.tar.gz
      tar xvzf apache-tomcat-7.0.56.tar.gz
      mv apache-tomcat-7.0.56/ apache-tomcat-7.0.56-server-1/

Запустите Tomcat

        ./startup.sh
            Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.56-server-1
            Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.56-server-1
            Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.56-server-1/temp
            Using JRE_HOME:        /usr/lib/jvm/java-7-oracle/jre
            Using CLASSPATH:       /usr/local/apache-tomcat-7.0.56-server-1/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.56-server-1/bin/tomcat-juli.jar
            Tomcat started.

Заказ Порт 8080

        netstat -ln 
            tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
            tcp6       0      0 :::8009                 :::*                    LISTEN
            tcp6       0      0 :::8080                 :::*                    LISTEN
            tcp6       0      0 :::22                   :::*                    LISTEN

Процесс оформления заказа

            ps -ef | grep tomcat
            root      2825     1  1 14:23 pts/0    00:00:03 /usr/lib/jvm/java-7-oracle/jre/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.56-server-1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/apache-tomcat-7.0.56-server-1/endorsed -classpath /usr/local/apache-tomcat-7.0.56-server-1/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.56-server-1/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/apache-tomcat-7.0.56-server-1 -Dcatalina.home=/usr/local/apache-tomcat-7.0.56-server-1 -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.56-server-1/temp org.apache.catalina.startup.Bootstrap start

Открыть веб-сайт на порту 8080 http://5.101.107.56:8080/ Страница ждет... [содержимое отображается через 28 минут или более]

Попробуйте отключить tomcat, если содержимое пока не отображается (до того, как tomcat начнет правильно).

      ./shutdown.sh 
            SEVERE: Could not contact localhost:8005. Tomcat may not be running.
            Oct 17, 2014 2:40:29 PM org.apache.catalina.startup.Catalina stopServer
            SEVERE: Catalina.stop:
                java.net.ConnectException: Connection refused
                at java.net.PlainSocketImpl.socketConnect(Native Method)
                at java.net.AbstractPlainSoc

Журнал регистрации

      catalina.out
            Oct 17, 2014 2:31:47 PM org.apache.coyote.AbstractProtocol init
            INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
            Oct 17, 2014 2:31:47 PM org.apache.catalina.startup.Catalina load
            INFO: Initialization processed in 1492 ms
            Oct 17, 2014 2:31:47 PM org.apache.catalina.core.StandardService startInternal
            INFO: Starting service Catalina
            Oct 17, 2014 2:31:47 PM org.apache.catalina.core.StandardEngine startInternal
            INFO: Starting Servlet Engine: Apache Tomcat/7.0.56
            Oct 17, 2014 2:31:47 PM org.apache.catalina.startup.HostConfig deployDirectory
            INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.56-server-1/webapps/host-manager

Я также установил nginx и перешел на http://5.XXX.XXX.XX/ Открыта приветственная страница nginx немедленно

Я проверил каталину. Когда я вижу страницу в браузере, она говорит:

    Oct 17, 2014 2:31:47 PM org.apache.catalina.startup.HostConfig deployDirectory
    INFO: Deploying web application directory /usr/local/apache-tomcat-7.0.56-server-1/webapps/host-manager
    Oct 17, 2014 3:00:27 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
    INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took **[1,718,769] milliseconds.**

Память:

               total       used       free     shared    buffers     cached
  Mem:       1017912     849512     168400        332      18780     688468
  • 2
    Похоже, у машины заканчивается энтропия для генератора случайных чисел.
  • 0
    да, я пытаюсь установить -Djava.security.egd = file: / dev /./ urandom
Теги:
digital-ocean
tomcat

3 ответа

70
Лучший ответ

Замена securerandom.source=file:/dev/urandom на securerandom.source=file:/dev/./urandom в $JAVA_PATH/jre/lib/security/java.security решила мою проблему.

Даже если указан file:/dev/urandom, JRE по-прежнему будет использовать /dev/random для SHA1PRNG (см. ошибку JDK-4705093):

В SHA1PRNG есть SeedGenerator, который выполняет разные вещи в зависимости от конфигурации.

  • Если java.security.egd или securerandom.source указывают на "файл:/dev/random" или "файл:/dev/urandom", мы будем использовать NativeSeedGenerator, который вызывает super(), который вызывает SeedGenerator.URLSeedGenerator(/DEV/случайный). (Вложенный класс внутри SeedGenerator.) Единственное, что изменилось в этой ошибке, было то, что urandom также инициирует использование этого пути кода.

  • Если эти свойства указывают на другой существующий URL, мы инициализируем SeedGenerator.URLSeedGenerator(url). Вот почему "файл:///dev/urandom", "файл:/./dev/random" и т.д. будут работать.

Из Википедия на /dev/random:

В этой реализации генератор сохраняет оценку числа бит шума в энтропийном пуле. Из этого энтропийного пула случайный числа создаются. При чтении устройство /dev/random будет только возвращать случайные байты в пределах оцененного количества бит шума в энтропийный пул. /dev/random должен быть подходящим для использования, которое необходимо очень качественная случайность, например, одноразовая клавиатура или генерация ключей.

Когда пул энтропии пуст, чтение из /dev/random будет блокироваться пока не будет собран дополнительный экологический шум. Цель состоит в том, чтобы служат в качестве криптографически надежного генератора псевдослучайных чисел, обеспечивая максимальную производительность с энтропией. Это предлагается для использования в генерации криптографических ключей для высокоценных или долгосрочных защита.

Экологический шум?

Генератор случайных чисел собирает экологический шум с устройства драйверов и других источников в энтропийный пул. Генератор также хранит оценку количества бит шума в пуле энтропии. Из этого энтропийного пула создаются случайные числа.

Это означает, что на практике возможно заблокировать tomcat в течение неизвестного времени.

  • 4
    во-первых, это стоило мне 8 часов работы. Я думал, что это был я. Во-вторых, если вы установили tomcat через apt-get $JAVA_HOME находится здесь /usr/lib/jvm/default-java
  • 1
    вау это была мысль спасибо за решение.
Показать ещё 6 комментариев
16

Это также работает:

Собственно, установив следующее в /etc/default/tomcat 7, я был в порядке:

JAVA_OPTS = "- Djava.security.egd = файл:/dev/./urandom -Djava.awt.headless = true -Xmx1024m -XX: MaxPermSize = 512m -XX: + UseConcMarkSweepGC"

Комментарий от:

https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntu-14-04-via-apt-get

12

При использовании /dev/urandom, поскольку источником энтропии является обходной путь, который уменьшает время запуска Tomcat, это не очень хорошая идея, потому что это может иметь непреднамеренные побочные эффекты.

Другие компоненты, запущенные на сервере Tomcat (например, веб-приложения), могут зависеть от надежного инициализированного экземпляра SecureRandom, и могут возникнуть проблемы с безопасностью, если энтропия для случайных чисел недостаточна.

Собственно, это одна из причин, почему использование /dev/urandom не работает, но /dev/./urandom делает. SHA1PRNG сильно зависит от хорошего семени. Если семя не хорошо, случайные числа предсказуемы. Поэтому разработчик гарантировал, что для этой цели /dev/random используется как источник энтропии, даже если JVM настроен на использование /dev/urandom. Об этом сообщается два сообщения об ошибках (ошибка 1, ошибка 2).

Поэтому вместо изменения источника энтропии до /dev/urandom следует убедиться, что /dev/random имеет достаточную энтропию. Если в системе имеется аппаратный RNG, установка rng-tools должна сделать трюк. В противном случае установка haveged обеспечивает очень хороший источник энтропии, который не полагается на специальный аппаратный RNG. В виртуальной машине rng-tools может использовать энтропию с хоста через виртуальный аппаратный RNG. В качестве альтернативы этому можно было бы использовать EGD, но на данный момент это программное обеспечение не входит в репозитории Ubuntu, поэтому его надоедливо использовать.

  • 0
    Благодарю. Я подтверждаю, что установив haveged и не изменяя из /dev/random я установил время запуска tomcat, а также, посмотрев /proc/sys/kernel/random/entropy_avail кажется, что пул энтропии снова заполнен.
  • 0
    Спасибо, это прекрасно работает!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню