Tomcat7在Ubuntu 14.04 x64上启动太晚

我正在使用digitalocean,并试图安装和启动在Ubuntu的Tomcat,但不幸的是我不能做到这一点。 (创造了新的飞沫,并尝试了10次)

1GB内存30GB SSD磁盘阿姆斯特丹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) 

设置javapath

  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分钟或更长时间后显示]

尝试closurestomcat,如果内容尚未显示(在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欢迎页面立即打开

我查看了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.** 

记忆:

  total used free shared buffers cached Mem: 1017912 849512 168400 332 18780 688468 

$JAVA_PATH/jre/lib/security/java.securityreplacesecurerandom.source=file:/dev/urandomsecurerandom.source=file:/dev/./urandom解决了我的问题。

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

在SHA1PRNG中,有一个SeedGenerator根据configuration做各种事情。

  1. 如果java.security.egd或securerandom.source指向“file:/ dev / random”或“file:/ dev / urandom”,我们将使用NativeSeedGenerator,它调用了调用SeedGenerator.URLSeedGenerator(/ dev / random )。 (SeedGenerator中的一个嵌套类)在这个bug中唯一改变的是urandom也会触发这个代码path的使用。

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

/ dev / random上的维基百科 :

在这个实现中,生成器保持熵池中的噪声位数的估计。 从这个熵池中创build随机数。 读取时,/ dev / random设备将只在熵池中的估计的噪声位数内返回随机字节。 / dev / random应该适用于需要非常高质量随机性的应用,例如一次性密钥或密钥生成。

当熵池为空时,从/ dev / random中读取将被阻塞,直到收集到额外的环境噪声。 其目的是作为一个密码安全的伪随机数发生器,提供熵尽可能大的输出。 build议将其用于生成高价值或长期保护的密钥。

环境噪音?

随机数发生器将来自设备驱动器和其他源的 环境噪声收集到熵池中。 发生器还保持熵池中的噪声位数的估计。 从这个熵池中创build随机数。

这意味着在实践中,可以阻止tomcat一段未知的时间。

这也适用:

其实通过在/ 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

虽然使用/dev/urandom作为熵的来源是一种减lessTomcat启动时间的解决方法,但这不是一个好主意,因为它可能会产生意想不到的副作用。

在Tomcat服务器上运行的其他组件(例如Web应用程序)可能依赖于安全初始化的SecureRandom实例,并且随机数的熵不足时可能存在安全问题。

实际上,这是使用/dev/urandom不起作用的原因之一,而/dev/./urandom却是/dev/./urandom做的。 SHA1PRNG严重依赖一颗好种子。 如果种子不好,随机数是可以预测的。 因此,开发人员确保为此目的使用/dev/random作为熵源,即使JVMconfiguration为使用/dev/urandom 。 有两个关于这个错误的报告( 错误1 , 错误2 )。

所以不要把熵源改为/dev/urandom ,而应该确保/dev/random具有足够的熵。 如果系统有一个硬件RNG,那么安装rng-tools应该是可以的。 否则,安装haveged提供了一个非常好的熵源,不依赖于特殊的硬件RNG。 在虚拟机中, rng-tools可以通过虚拟硬件RNG从主机使用熵。 作为替代scheme,可以使用EGD ,但目前这个软件没有包含在Ubuntu软件库中,所以使用它很麻烦。