【发布时间】:2017-12-14 15:52:19
【问题描述】:
我一直在使用 Amazon EC2 运行我的 Tomcat+MySQL 网站,现在正在迁移到 Google Cloud Platform。我启动了一个计算引擎实例(Ubuntu 16.04),通过 ssh 连接到它并使用 apt-get 安装 mysql/tomcat7。
我遇到的问题是tomcat启动不了。 catalina.out 日志没有“Server startup at xxxms”消息,我无法通过浏览器连接到 8080 端口。
catalina.out 的最后几行是
Jul 10, 2017 7:06:20 PM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 928 ms
Jul 10, 2017 7:06:20 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service Catalina
Jul 10, 2017 7:06:20 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.68 (Ubuntu)
Jul 10, 2017 7:06:20 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/host-manager.xml
Jul 10, 2017 7:06:21 PM org.apache.catalina.startup.TldConfig execute INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
当我使用netstat查看时,显示用户tomcat7正在监听8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 115 32984 -
$ id -u tomcat7
$ 115
我尝试在 ssh 终端中 wget localhost:8080,它显示
Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response...
然后就挂在那里。
任何想法或建议将不胜感激!
更新
事实证明,防火墙不是问题的根本原因,即使不允许端口 8443,Tomcat 也可以工作(因为你需要允许 8080)。没有显示“Server started”消息的原因是Tomcat启动时间过长(第一次1346049 ms,重新启动时354034 ms,除了默认的index.html没有安装Web应用程序),原因是没有响应请求也是还没启动完毕。
这是我第一次看到 Tomcat 需要这么长时间才能启动,也是我一开始没有意识到它的原因。我怀疑(通过一些搜索)这是由 Tomcat Jar 扫描引起的。一旦我有更多细节,将继续更新这个问题。
更新 - 问题已解决
原来我遇到了同样的问题here,解决方法是here。简而言之,大部分时间都花在了以下任务上:
Creation of SecureRandom instance for session ID generation using [SHA1PRNG]
这需要 Java 加载 /dev/random 以获取随机数。 /dev/random 通常从键盘/鼠标输入中获取其熵源,这在无头虚拟机上无法提供足够的随机性。这会导致随机数在计算过程中“用完”并导致大量等待。解决方案是安装 haveged,它使用其他来源来提供随机性(链接中的详细信息)。
我安装了haveged,现在tomcat启动只需1秒,一切正常。
【问题讨论】:
标签: tomcat7 google-cloud-platform google-compute-engine