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

部署Spring Boot/Batch应用到CentOS7时出现无法创建本地线程OOM错误如何解决

错误诱因

该错误是当前操作系统用户的线程/进程数限制过低导致的:
Linux系统的ulimit -u(max user processes)参数限制了单个用户可以创建的进程+线程总数量,你当前用户的该值仅为35,而Spring Boot应用默认启动时需要创建数十个线程(包括Tomcat工作线程、JVM GC线程、Spring框架内置调度线程、业务线程等),直接触达资源上限,操作系统无法为JVM分配新的线程资源,因此抛出unable to create native thread的OOM错误。
系统总线程数365、负载0.15均处于正常区间,不存在全局资源不足问题,仅为用户级的线程数限制导致。

可自行尝试的修复方案
  • 禁用web容器:你开发的是Spring Batch批处理应用,不需要对外提供web服务,在application.properties/yml中添加配置spring.main.web-application-type=none,完全禁用Tomcat相关组件,可减少10~20个线程的占用。
  • 调小JVM默认线程数:启动jar时添加JVM参数限制GC线程数量,启动命令修改为:
    ./java -XX:ParallelGCThreads=2 -XX:ConcGCThreads=1 -jar /home/webadmin/notartel-import-data-batch/UpdateInfoBatch-0.0.1-SNAPSHOT.jar
    
    避免JVM按照服务器CPU核数默认开启大量GC线程。
  • 调小框架线程池配置:如果必须保留web容器,可添加配置server.tomcat.max-threads=5、server.tomcat.min-spare-threads=1;调整Spring Batch线程池配置spring.task.execution.pool.core-size=2、spring.task.execution.pool.max-size=3,进一步压缩线程占用。
  • 清理当前用户冗余进程:执行ps -u webadmin查看你当前用户名下运行的所有进程,杀掉无意义的残留进程,释放已占用的线程额度。
需要运维调整的配置参数
  • 调整用户级进程/线程数限制:修改/etc/security/limits.conf文件,添加如下配置(webadmin替换为你的实际用户名):
    webadmin soft nproc 2048
    webadmin hard nproc 4096
    
    将单用户可创建的最大线程/进程数上调到至少2048,满足普通Java应用的运行需求。
  • 调整systemd任务上限:CentOS7的systemd默认会对用户任务数做额外限制,优先级高于limits.conf,需要修改对应用户的service配置,将TasksMax参数调整为2048以上,或者设置为infinity。
  • 可选:如果后续应用有内存占用增长需求,可同步调大对应用户的内存限制soft as、hard as参数,避免后续出现内存不足问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:05