java - Debian linux Tomcat 8 全新安装在端口 8080 上没有响应

标签 java linux tomcat

我最近在 Debian 9 和 Ubuntu 16.04 LTS 中遇到过这个问题两次。

全新安装操作系统后,仅使用 Tomcat 8 和 openjdk 8(默认配置未更改),重新启动几次后,Tomcat 服务器在端口 8080 上停止响应。

服务器仍在监听端口,但即使是简单的 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...

根据线程转储,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)

为什么会发生这种情况以及如何解决?

最佳答案

基于 Debian 的发行版上的 OpenJDK 8 附带预配置为熵源的 /dev/random

当没有足够的熵时,/dev/random 将阻塞。

解决方案 1:(首选)

安装haveged ,它是一个生成额外熵的守护进程。

解决方案 2:(可能不太安全)

更改/usr/lib/jvm/default-java/jre/lib/security/java.security以使用/dev/urandom:

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

这将全局适用于所有 Java 进程。

或者,将 -Djava.security.egd=file:/dev/./urandom 添加到 /etc/default/tomcat8 中的 JAVA_OPTS >(仅适用于 Tomcat 进程)。

关于java - Debian linux Tomcat 8 全新安装在端口 8080 上没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47097334/

相关文章:

java - WTP(eclipse3.7)在Windows7下 Debug模式下无法启动tomcat6

java - Tomcat:如何将不同的目录指向同一个 WEB-INF

java - 定时器程序卡住

Java 对传递给 JSP 的 SQL 查询返回空指针异常

java - 将 Keycloak 与符合 FIPS 的 JDK 一起使用

java - 如何更改数组元素的值

r - "Cannot allocate memory"和 "non-zero exit status"- 无法在 Raspberry Pi 上安装 R 包

linux - 从 Linux 中的 tgz 中提取未压缩的文件

linux - 递归删除文件和文件夹

tomcat - zookeeper 可以代替 Nginx 或 Apache Server 用作负载均衡器吗?