Next.js 14生产构建报错EMFILE:打开文件过多求解决方案
解决Next.js 14生产构建EMFILE: too many open files错误的方案
确认ulimit永久生效配置
临时调整ulimit仅对当前会话有效,需修改系统全局配置确保重启后仍生效:- 编辑
/etc/security/limits.conf,添加以下内容:
* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535- 编辑
/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive,添加一行:
session required pam_limits.so- 重启EC2服务器,执行
ulimit -n验证是否生效为65535。
- 编辑
在构建命令中强制提升文件描述符限制
直接在构建命令前追加ulimit配置,确保Node.js进程能获取足够的文件描述符:
修改package.json的build脚本:"scripts": { "build": "ulimit -n 65535 && next build" }或者执行构建时直接用:
ulimit -n 65535 && npm run build优化Next.js构建并发配置
减少Webpack同时处理的文件数量,避免超出限制:
在next.config.js中添加Webpack配置:module.exports = { webpack: (config, { isServer }) => { // 根据服务器CPU核心数调整并发数,比如4核服务器设为4 config.parallelism = 4; return config; }, // 开启增量构建,减少每次构建处理的文件量 incremental: true, };检查系统其他进程占用
执行lsof | wc -l查看当前系统打开的文件总数,确认是否有其他进程(如日志服务、数据库)占用大量文件描述符,必要时关闭或优化这些进程。使用fs-max模块(针对特定Node.js版本)
如果上述方法无效,可尝试安装fs-max模块强制提升Node.js的文件描述符限制:npm install fs-max --save-dev在next.config.js顶部添加:
require('fs-max').set();
内容的提问来源于stack exchange,提问作者Sirazul Islam
相关产品推荐
相关产品推荐

