You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ktor应用Docker部署到Ubuntu VServer启动耗时超3000秒如何排查?

问题根因

从提供的线程栈信息可以直接定位问题根源:程序阻塞在加密安全随机数生成逻辑上,本质是Linux VPS的系统熵池不足导致的。

  • 代码在WebsocketRouting.kt第40行的类初始化阶段调用了Kotlin随机数生成接口,底层默认依赖JDK的SecureRandom实现
  • 新创建的空闲云服务器没有足够的硬件交互事件(键盘输入、鼠标操作、磁盘IO、网络波动)生成熵,/dev/random设备会一直阻塞直到收集到足够的熵值才会返回随机数,就是启动耗时超长的核心原因
  • 本地开发设备因为有大量用户交互事件,熵池始终处于充足状态,所以不会出现阻塞问题

修复方案

方案1:修改JVM启动参数(推荐,无需改动业务代码)

在Docker镜像的Java程序启动命令中添加如下参数,指定SecureRandom使用非阻塞熵源:

java -Djava.security.egd=file:/dev/./urandom -jar 你的应用包名.jar

路径中写/dev/./urandom是为了兼容旧版本JDK的路径校验逻辑,部分老版本JDK直接配置/dev/urandom不会生效。

方案2:系统层面安装熵生成服务

在VPS宿主机上安装haveged服务,主动生成熵填充系统熵池:

# Ubuntu 20.04执行如下命令
apt update && apt install -y haveged
systemctl enable --now haveged

方案3:代码层面调整随机数实现

如果业务场景不需要加密安全级别的随机数,可以显式指定使用不依赖系统熵池的随机数实现,从根本上避免阻塞。

验证调试方法

  • 执行命令cat /proc/sys/kernel/random/entropy_avail即可查看当前系统可用熵值,正常可用值应高于1000,低于200时就会出现明显的随机数生成阻塞
  • 修复后重启服务,查看启动耗时即可验证是否生效

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:51:02