当前位置: 首页 > news >正文

【Docker 运维】Java 应用在 Docker 容器中启动报错:`unable to allocate file descriptor table`

文章目录

    • 一、根本原因
    • 二、判断与排查方法
    • 三、解决方法
      • 1、限制 Docker 容器的文件描述符上限
      • 2、在执行脚本中动态设置ulimit的值
      • 3、升级至 Java 11+
    • 四、总结

容器内执行脚本时报错如下,Java 进程异常退出:

library initialization failed - unable to allocate file descriptor table- out of memory
/entrypoint.sh: line 2: 6 Aborted (core dumped) java ...

 

一、根本原因

该问题源于 Java 8 的 JDK Bug(JDK-8150460)

  • Java 8 在启动时,会尝试根据当前系统 ulimit -n 值,预分配文件描述符表的内存块
  • 在现代系统中默认 ulimit -n 值通常为 65535 或更高;
  • 在容器资源受限或配置不当的情况下,native 层内存不足,JVM 启动失败,抛出 unable to allocate file descriptor table

此外还有两个系统环境相关的影响:

  1. 旧版本的 systemd 不支持 LimitNOFILE=infinity 生效
  2. Docker 容器的默认 ulimit 配置可能不足,或者过大触发此问题。

 

二、判断与排查方法

## 1. 确认容器内的 `ulimit` 值docker exec <container_id> ulimit -n## 2. 检查系统 systemd 版本
systemctl --version若版本 < 234`infinity` 设置不会生效。## 3. 确认是否为 Java 8
java -version

 

三、解决方法

1、限制 Docker 容器的文件描述符上限

将容器启动参数中显式设置 ulimit -n

docker run --ulimit nofile=1024:1024 -d -p 8080:8080 your-image

或者在 docker-compose.yml 中配置:

ulimits:nofile:soft: 1024hard: 1024

推荐设置为 8192 以下,如 1024、4096 等。

2、在执行脚本中动态设置ulimit的值

参考:【stackoverflow】Error upon jar execution - unable to allocate file descriptor table

 

3、升级至 Java 11+

此问题在 Java 9+ 已被修复。

 

四、总结

项目推荐做法
问题本质Java 8 + 高 ulimit -n 导致 native 层分配失败
快速修复--ulimit nofile=1024:1024 限制容器文件句柄
永久方案配置 systemd 或升级 JDK
最优解切换 Java 11+,从根源上解决

相关文章:

  • 计组1.2.2——各个硬件的工作原理
  • 永磁同步电机控制算法-VF控制
  • 初识Redis · C++客户端set和zset
  • 创建 Node.js Playwright 项目:从零开始搭建自动化测试环境
  • Web3核心技术解析:从区块链到C++实践
  • 【Linux】进程替换与自定义 Shell:原理与实战
  • 【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现
  • 电商数据自动化采集方案:淘宝商品详情 API 接入与数据处理技巧
  • 电脑硬盘常见的几种接口类型
  • C++ 操作符重载Operator
  • UofTCTF-2025-web-复现
  • 精益数据分析(11/126):辨别虚荣指标,挖掘数据真价值
  • 极狐GitLab 自定义实例级项目模板功能介绍
  • JVM 内存分布详解
  • 深入理解HotSpot JVM 基本原理
  • PyTorch实现糖尿病预测的CNN模型:从数据加载到模型部署全解析【N折交叉验证、文末免费下载】
  • Java学习路线--自用--带链接
  • 天翼云手机断开连接2小时关机
  • MySQL的窗口函数(Window Functions)
  • 【图像轮廓特征查找】图像处理(OpenCV) -part8
  • 体坛联播|皇马补时绝杀毕尔巴鄂,利物浦最快下轮即可夺冠
  • 为什么要研制大型水陆两栖飞机?AG600总设计师给出答案
  • 北理工再通报:开除宫某党籍,免去行政职务,解除聘用关系
  • 西藏艺术来到黄浦江畔,“隐秘之门”艺术展外滩三号开幕
  • 由“环滁皆山”到“环滁皆景”,滁州如何勾勒“文旅复兴”
  • 姜仁华任中国水稻研究所所长,胡培松院士卸任