我一直在使用Amazon EC2运行我的Tomcat + MySQL网站一段时间,现在正在迁移到Google Cloud Platform。我启动一个计算引擎实例(Ubuntu 16.04),通过ssh连接到它并使用apt-get来安装mysql / tomcat7。
我遇到的问题是tomcat无法启动。 catalina.out日志没有“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终端中找到localhost:8080,它显示
Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response...
然后就在那里。
非常感谢任何想法或建议!
事实证明防火墙不是问题的根本原因,即使没有允许端口8443 Tomcat也可以工作(因为你需要允许8080)。没有“服务器启动”消息显示的原因是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通常从键盘/鼠标输入获取其熵源,这无法在无头虚拟机上提供足够的随机性。这导致随机数在计算期间“用完”并导致大量等待。解决方案是安装 hasged ,它使用其他一些来源来提供随机性(链接中的详细信息)。
我安装了hasged,现在tomcat启动只需1秒,一切正常。
答案 0 :(得分:1)
感谢您提出这样有趣的问题。
我从未使用Google云服务,但我设法复制了您的问题。
reading a little后,我发现您需要更新防火墙规则以启用对8080端口的访问权限。
转到:
1)(汉堡图标,左上角) 2)网络 3)防火墙规则 4)添加新的
我创建了一个名为' allow-tomcat7'有这个属性:
Descripción
Enables Tomcat 7 access
Red
default
Prioridad
1000
Dirección
Entrada
Acción tras coincidencia
Permitir
Filtros de origen
Intervalos de IP
0.0.0.0/0
Protocolos y puertos
tcp:8080
tcp:8443
udp:8080
可以选择'目标代码'当你编辑配置时,虽然我已经创建了一个'标签'并且仅将它应用于我的新EC实例,它没有工作。我不得不删除目标标签,它就像一个魅力:
确保只允许访问您的IP地址!
您需要调整安全设置,否则,您将成为蜜罐,一旦我为所有人启用了端口,就会有几个机器人开始扫描它:
daychuzleo@testing-tomcat:~$ sudo tcpdump -i ens4 port 8080
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
20:39:31.437634 IP 170.251.221.183.54162 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [.], seq 1638030511:1638030512, ack 1250919796, win 259, length 1: HTTP
20:39:31.437665 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.54162: Flags [.], ack 1, win 231, options [nop,nop,sack 1 {0:1}], length 0
20:39:37.133899 IP 170.251.221.183.53878 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [.], seq 2436191518:2436191519, ack 4071767590, win 259, length 1: HTTP
20:39:37.133930 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.53878: Flags [.], ack 1, win 222, options [nop,nop,sack 1 {0:1}], length 0
20:39:51.379839 IP 170.251.221.183.54162 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [F.], seq 1, ack 1, win 259, length 0
20:39:51.392375 IP 170.251.221.183.47923 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [S], seq 1420913913, win 8192, options [mss 1386,nop,wscale 8,nop,nop,sackOK,unknown-76 0x01010a18e9680005,unknown-76 0x0c01,nop,eol], length 0
20:39:51.392410 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.47923: Flags [S.], seq 507557961, ack 1420913914, win 28400, options [mss 1420,nop,nop,sackOK,nop,wscale 7], length 0
20:39:51.421934 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.54162: Flags [.], ack 2, win 231, length 0
20:39:51.586555 IP 170.251.221.183.47923 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [.], ack 1, win 259, length 0
20:39:51.590317 IP 170.251.221.183.47923 > testing-tomcat.c.hip-river-163201.internal.http-alt: Flags [P.], seq 1:389, ack 1, win 259, length 388: HTTP: GET / HTTP/1.1
20:39:51.590337 IP testing-tomcat.c.hip-river-163201.internal.http-alt > 170.251.221.183.47923: Flags [.], ack 389, win 231, length 0
我无法使用wget工作,但我认为你会发现它。
<强>更新强>
我忘记提及一些你可能没有配置的事情:
- 虚拟机实例中的HTTP和HTTPS缓存防火墙:
确定您未被公司防火墙过滤,尝试使用手机或不受限制的网络中的4g进行测试,或者只是让您的IT团队允许您访问临时公共IP(生成(每次)。
sudo service tomcat7 start
我做过的其他事情(在研究过程中)
将服务移至IPV4而非IPV6
daychuzleo @ testing-tomcat:〜$ netstat -ntpl
(并非所有流程都可以识别,非自有流程信息
不会显示,你必须是root才能看到这一切。)
活动Internet连接(仅限服务器)
Proto Recv-Q Send-Q本地地址外部地址状态PID /程序名称
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp6 0 0 ::: 22 ::: * LISTEN -
为此,编辑默认的tomcat并在JavaOPTS中添加IPV4选项:
vim /etc/default/tomcat
JAVA_OPTS="-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true"
禁用8443重定向
评论部分&#34; redirectPort&#34;在server.xml中:
vim /etc/tomcat/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
address="0.0.0.0"/>
<!--redirectPort="8443" />-->
通过重新启动tomcat实例来验证每项更改。