简体   繁体   English

Debian Linux Tomcat 8全新安装在端口8080上未响应

[英]Debian linux Tomcat 8 fresh install not responding on port 8080

I've encountered this issue twice recently, in Debian 9 as well as Ubuntu 16.04 LTS. 我最近在Debian 9和Ubuntu 16.04 LTS中两次遇到此问题。

After a fresh install of the OS with just Tomcat 8 and openjdk 8 (no changes to the default config), after a few restarts the Tomcat server stops responding on port 8080. 仅使用 Tomcat 8和openjdk 8全新安装操作系统(未更改默认配置)之后,重新启动几次后,Tomcat服务器停止在端口8080上响应。

The server is still listening on the port, but even a simple GET / just hangs forever: 服务器仍在侦听端口,但即使是简单的GET /也会永久挂起:

# netstat -an|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN

# wget http://127.0.0.1:8080/
--2017-11-03 13:19:52--  http://127.0.0.1:8080/
Connecting to 127.0.0.1:8080... connected.
HTTP request sent, awaiting response...

According to the thread dump Tomcat appears to be hanging on startup: 根据线程转储,Tomcat似乎在启动时挂起了:

"localhost-startStop-1" #14 daemon prio=5 os_prio=0 tid=0x00000000018a1000 nid=0x68d8 runnable [0x00007f2badacd000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:255)
        at sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedBytes(SeedGenerator.java:539)
        at sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:144)
        at sun.security.provider.SecureRandom$SeederHolder.<clinit>(SecureRandom.java:203)
        at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:221)
        - locked <0x00000000f99155c0> (a sun.security.provider.SecureRandom)
        at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
        at java.security.SecureRandom.next(SecureRandom.java:491)
        at java.util.Random.nextInt(Random.java:329)
        at org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom(SessionIdGeneratorBase.java:237)
        at org.apache.catalina.util.SessionIdGeneratorBase.getRandomBytes(SessionIdGeneratorBase.java:174)
        at org.apache.catalina.util.StandardSessionIdGenerator.generateSessionId(StandardSessionIdGenerator.java:34)
        at org.apache.catalina.util.SessionIdGeneratorBase.generateSessionId(SessionIdGeneratorBase.java:167)
        at org.apache.catalina.util.SessionIdGeneratorBase.startInternal(SessionIdGeneratorBase.java:256)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
        - locked <0x00000000f9905808> (a org.apache.catalina.util.StandardSessionIdGenerator)

Why is this happening and how to fix it? 为什么会发生这种情况以及如何解决?

OpenJDK 8 on Debian-based distros comes with /dev/random preconfigured as the source of entropy. 基于Debian的发行版上的OpenJDK 8带有/dev/random预配置为熵的来源。

When there isn't enough entropy, /dev/random will block. 当没有足够的熵时, /dev/random将阻止。

Solution 1: (preferred) 解决方案1 ​​:(首选)

Install haveged , it's a daemon that generates additional entropy. 安装hadged ,它是一个生成附加熵的守护程序。

Solution 2: (probably less secure) 解决方案2 :(可能不太安全)

Change /usr/lib/jvm/default-java/jre/lib/security/java.security to use /dev/urandom instead: /usr/lib/jvm/default-java/jre/lib/security/java.security更改为使用/dev/urandom

#securerandom.source=file:/dev/random
securerandom.source=file:/dev/./urandom

That will apply globally to all Java processes. 这将全局适用于所有Java进程。

Alternatively, add -Djava.security.egd=file:/dev/./urandom to JAVA_OPTS in /etc/default/tomcat8 (will apply to Tomcat processes only). 或者,将-Djava.security.egd=file:/dev/./urandom/etc/default/tomcat8 JAVA_OPTS中(仅适用于Tomcat进程)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM