解决Tomcat环境变量配置后响应慢

轻丽同学_2076

轻丽同学_2076

2026-09-09

730人浏览

原创

根本原因是jdk默认securerandom使用/dev/random阻塞等待熵池,导致tomcat启动卡在“initializing protocolhandler”;修复方案是将java.security中securerandom.source改为file:/dev/urandom或添加-djava.security.egd=file:/dev/./urandom参数。

解决tomcat环境变量配置后响应慢

为什么改了JAVA_HOME后Tomcat启动变慢

根本原因不是环境变量本身,而是JDK默认的随机数生成器卡在/dev/random上。Tomcat启动时(尤其是首次)会调用SecureRandom生成会话ID、SSL密钥等,而/dev/random依赖系统熵池,Linux服务器若无足够硬件中断(比如虚拟机、云主机常见),就会阻塞等待,导致启动耗时从几秒拉长到几十秒甚至更久。

  • 现象:执行./startup.sh后控制台长时间无输出,catalina.out里最后日志停在“Initializing ProtocolHandler”附近
  • 验证方式:启动时加-Djava.security.egd=file:/dev/./urandom参数,若明显变快,基本可锁定问题
  • 不建议直接改/dev/random软链接——会影响整个系统安全随机数行为

最快生效的修复方式:改JDK的java.security配置

这是最稳定、影响面最小的方案,无需重启服务器,改完即生效(下次Tomcat启动时读取)。

CuspAI
CuspAI

CuspAI是一款AI工具,剑桥大学推出的材料学专业AI搜索工具。

下载
  • 路径定位:$JAVA_HOME/jre/lib/security/java.security(JDK 8/11/17 均适用)
  • 找到这一行:securerandom.source=file:/dev/random
  • 改成:securerandom.source=file:/dev/urandom
  • 注意:必须保留file:前缀,不能写成/dev/urandom,否则JVM会忽略
  • 修改后无需重启JDK进程,Tomcat下次启动自动生效

替代方案:启动脚本中加JVM参数(适合临时验证或容器环境)

如果无法修改JDK全局配置(如共享JDK环境、权限受限),可在Tomcat启动时注入参数,效果等同于上面的配置,但优先级更高。

  • Linux下编辑$CATALINA_HOME/bin/catalina.sh,在if [ -z "$JAVA_OPTS" ] ; then之后追加:
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
  • Windows下编辑catalina.bat,在set JAVA_OPTS=行后加:
  • set JAVA_OPTS=%JAVA_OPTS% -Djava.security.egd=file:/dev/./urandom
  • 注意路径写法是/dev/./urandom而非/dev/urandom——这是JVM的一个绕过检查的兼容写法,避免部分JDK版本报错
  • 容易被忽略的细节:容器与云主机的特殊性

    在Docker、Kubernetes或阿里云/腾讯云ECS上,这个问题更频繁,因为这些环境通常缺乏键盘、鼠标、磁盘IO等熵源。即使你改了java.security,如果镜像基础层没预装haveged或rng-tools,其他Java应用仍可能卡住。

    • 容器内临时补救:apt-get install -y haveged && systemctl start haveged(Debian/Ubuntu)
    • 生产镜像建议:构建时就写入java.security修改,或固定使用-Djava.security.egd参数
    • 别信“改maxThreads就能解决启动慢”——那是处理请求阶段的参数,和启动阻塞无关

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    如何配置Tomcat环境变量
    如何配置Tomcat环境变量

    配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.26

    725

    5

    idea如何集成Tomcat
    idea如何集成Tomcat

    idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    304

    5

    怎么查看Tomcat源代码
    怎么查看Tomcat源代码

    查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    489

    5

    常见的tomcat漏洞有哪些
    常见的tomcat漏洞有哪些

    常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    285

    5

    tomcat日志乱码怎么解决
    tomcat日志乱码怎么解决

    tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    328

    5

    weblogic和tomcat有哪些区别
    weblogic和tomcat有哪些区别

    weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    329

    5

    tomcat和nginx有哪些区别
    tomcat和nginx有哪些区别

    tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    561

    5

    tomcat启动闪退怎么解决
    tomcat启动闪退怎么解决

    tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    302

    5

    有哪些常见的tomcat漏洞
    有哪些常见的tomcat漏洞

    常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.02.23

    2413

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Tomcat核心原理解析
    Tomcat核心原理解析

    共57课时 | 8.8万人学习

    Apache Maven 官方安装指南
    Apache Maven 官方安装指南

    共0课时 | 0人学习

    PHP基础-环境/变量/函数等
    PHP基础-环境/变量/函数等

    共57课时 | 18.1万人学习