Tomcat7在Ubuntu 14.04 x64上启动太晚[Digitalocean]

yuc*_*eel 47 java ubuntu tomcat digital-ocean

我正在使用digitalocean并尝试在ubuntu上安装和启动tomcat但不幸的是我不能这样做.(创造了新的水滴并尝试了10次)

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

当我启动tomcat时,它说"Tomcat启动".但我无法从浏览器访问页面.和./shutdown.sh返回错误.

可能是什么问题?

我现在注意到了什么.在我写这个问题时,会显示tomcat页面.显示页面花了28分钟

catalina.out说:INFO:使用[SHA1PRNG]为会话ID生成创建SecureRandom实例花了[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)
Run Code Online (Sandbox Code Playgroud)

设置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/
Run Code Online (Sandbox Code Playgroud)

启动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.
Run Code Online (Sandbox Code Playgroud)

结帐端口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
Run Code Online (Sandbox Code Playgroud)

结帐流程

            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
Run Code Online (Sandbox Code Playgroud)

在端口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
Run Code Online (Sandbox Code Playgroud)

结帐日志

      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
Run Code Online (Sandbox Code Playgroud)

我还安装了nginx并导航到http://5.XXX.XXX.XX/nginx欢迎页面立即打开

当我在浏览器中看到该页面时,我检查了catalina.out,它说:

    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.**
Run Code Online (Sandbox Code Playgroud)

记忆:

               total       used       free     shared    buffers     cached
  Mem:       1017912     849512     168400        332      18780     688468
Run Code Online (Sandbox Code Playgroud)

yuc*_*eel 77

securerandom.source=file:/dev/urandomsecurerandom.source=file:/dev/./urandomin 替换$JAVA_PATH/jre/lib/security/java.security已经解决了我的问题.

即使file:/dev/urandom指定了,JRE仍将/dev/random用于SHA1PRNG(参见错误JDK-4705093):

在SHA1PRNG中,有一个SeedGenerator,可根据配置执行各种操作.

  1. 如果java.security.egd或securerandom.source指向"file:/ dev/random"或"file:/ dev/urandom",我们将使用NativeSeedGenerator,它调用super()调用SeedGenerator.URLSeedGenerator(/ dev/random) ).(SeedGenerator中的嵌套类.)此bug中唯一发生变化的是urandom也会触发使用此代码路径.

  2. 如果这些属性指向另一个存在的URL,我们将初始化SeedGenerator.URLSeedGenerator(url).这就是"file:/// dev/urandom","file:/./ dev/random"等的原因.

来自维基百科/ dev/random:

在该实现中,生成器保持对熵池中的噪声比特数的估计.从该熵池中创建随机数.读取时,/ dev/random设备仅返回熵池中估计的噪声位数内的随机字节./ dev/random应该适用于需要非常高质量随机性的用途, 例如一次性键盘或密钥生成.

当熵池为空时,来自/ dev/random的读取将阻塞, 直到收集到额外的环境噪声.目的是充当加密安全的伪随机数发生器,以尽可能大的熵提供输出.建议将其用于生成用于高价值或长期保护的加密密钥.

环境噪音?

随机数发生器将来自设备驱动程序和其他源的环境噪声 收集到熵池中.生成器还保持对熵池中的噪声位数的估计.从该熵池中创建随机数.

这意味着在实践中,可以在未知的时间内阻止tomcat.

  • 首先,谢谢,这花了我8个小时的工作.我以为是我 其次,如果您通过`apt-get`安装了tomcat,`$ JAVA_HOME`就在这里`/ usr/lib/jvm/default-java` (4认同)
  • 谢谢.我正在使用JDK8而不是.../urandom我有... /随机.我确实将随机更改为urandom. (2认同)

Zou*_*ias 17

这也有效:

实际上,通过在/ etc/default/tomcat7中设置以下内容,我很好:

JAVA_OPTS =" - Djava.security.egd = file:/ 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


Seb*_*ing 13

虽然使用/dev/urandom熵作为源来减少Tomcat的启动时间,但这不是一个好主意,因为它可能会产生意想不到的副作用.

在Tomcat服务器中运行的其他组件(例如Web应用程序)可能依赖于安全初始化的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存储库中,因此使用它很麻烦.