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

破解软件网站湖南郴州市旅游景点

破解软件网站,湖南郴州市旅游景点,化学试剂网站建设,个人建网站教程Node.js 报错 ENOBUFS 处理方案 在使用 Node.js 进行文件操作(例如解压 200M 大文件)时,经常会遇到 ENOBUFS(缓冲区溢出)错误。本文主要介绍如何通过两部分来解决此问题: 调整 Linux 系统配置 包括查询当…

Node.js 报错 ENOBUFS 处理方案

在使用 Node.js 进行文件操作(例如解压 200M 大文件)时,经常会遇到 ENOBUFS(缓冲区溢出)错误。本文主要介绍如何通过两部分来解决此问题:

  1. 调整 Linux 系统配置
    包括查询当前配置、配置说明以及如何调整这些配置。
  2. 调整 Node.js 代码实现方式
    针对解压操作进行优化,避免过多输出占用缓冲区,同时确保进程不会因 Egg.js 进程管理而被异常杀掉。

一、Linux 系统配置调整

1.1 查询当前配置

使用 ulimit -a 命令可以查看当前用户的各项资源限制。例如,常见输出如下:

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31138
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

对于处理大文件(如 200M 文件),可能需要调整以下参数:

  • Stack Size (-s):默认 8192 KB 太小,建议增大到 64MB(65536 KB)。
  • Max User Processes (-u):默认 4096 可能不足,建议增大到 65535。
  • Open Files (-n):默认 65535,建议适当提高到 1048576,以防止打开文件数不足。
  • Max Locked Memory (-l):默认 64 KB 太低,建议增大到 512MB(524288 KB)。

1.2 临时调整

在终端中执行以下命令,进行临时调整(当前 Shell 会话生效,重启后失效):

ulimit -s 65536    # 堆栈大小改为 64MB
ulimit -u 65535    # 允许最多 65535 个用户进程
ulimit -n 1048576  # 打开文件数限制提升到 1048576
ulimit -l 524288   # 锁定内存大小增加到 512MB

1.3 永久调整

为了让调整在系统重启后依然有效,可按以下步骤修改系统配置:

修改 /etc/security/limits.conf

编辑该文件,添加以下内容:

* soft stack 65536
* hard stack 65536
* soft nproc 65535
* hard nproc 65535
* soft nofile 1048576
* hard nofile 1048576
* soft memlock 524288
* hard memlock 524288
修改 PAM 配置

确保 PAM 会话加载了 pam_limits 模块。编辑 /etc/pam.d/common-session/etc/pam.d/common-session-noninteractive 文件,并添加:

session required pam_limits.soc
修改 systemd 配置

编辑 /etc/systemd/system.conf/etc/systemd/user.conf,添加或修改如下内容:

DefaultLimitSTACK=65536
DefaultLimitNOFILE=1048576
DefaultLimitNPROC=65535

修改完成后,重启系统使配置生效:

sudo reboot

二、Node.js 代码调整方案

传统使用 execSyncspawnSync 执行 shell 命令时,如果命令输出大量内容(例如使用 tar -zxvf 时的详细日志),会导致缓冲区溢出,引发 ENOBUFS 错误。以下代码提供了一种通过异步 spawn 调用、避免输出过多数据的解决方案:

2.1 代码实现

const { spawn } = require("child_process");
const path = require("path");const INSTALL_DIR = "/your/install/path"; // 请替换为实际路径const zxvfWebPackage = async function (filePath) {console.info(`解压 web 包: ${filePath}`);return new Promise((resolve, reject) => {try {const absFilePath = path.resolve(filePath);const absInstallDir = path.resolve(INSTALL_DIR);console.info(`执行解压: tar -zxf ${absFilePath} -C ${absInstallDir}`);const tarProcess = spawn("tar", ["-zxf", absFilePath, "-C", absInstallDir], {detached: true,  // 使进程独立于 Egg.js 进程shell: true,stdio: "ignore", // 避免缓冲区溢出,屏蔽标准输出和标准错误});tarProcess.unref(); // 让 Node.js 忽略该进程,不再跟踪它的生命周期console.info("解压进程已启动,不再跟踪");resolve({ code: 0, msg: "解压进程已启动" });} catch (err) {console.error(`解压失败: ${err.message}`);reject(err);}});
};

2.2 关键说明

  • 使用 tar -zxf
    通过去掉 -v 参数,可以避免打印过多的文件列表,从而减少标准输出数据,防止缓冲区溢出。
  • 异步 spawn 调用:
    使用异步 spawn 替代同步方法,避免因为大量数据输出而造成 Node.js 进程阻塞或内存溢出问题。
  • detached: trueunref()
    这两个参数使得解压进程独立于主进程(例如 Egg.js worker),即使主进程退出,解压进程仍能独立运行,不受管理进程生命周期的影响。
  • stdio: "ignore"
    屏蔽标准输出和错误,防止缓冲区因大量输出数据而溢出。如果需要调试输出,可以选择 inherit 或定制配置,但要谨慎控制输出量。

三、总结

Linux 系统调整:

  • 通过 ulimit 命令及修改配置文件,增大堆栈、用户进程、打开文件数以及锁定内存的限制。
  • 临时调整适用于当前会话,永久调整确保重启后生效。

Node.js 代码调整:

  • 避免使用同步命令(如 spawnSyncexecSync),而改用异步 spawn
  • 使用 tar -zxf 去除冗余输出,通过 detachedunref 参数确保子进程不受主进程生命周期的影响。
  • 采用 stdio: "ignore" 配置防止输出数据过多,避免 ENOBUFS 错误。

通过上述调整,可以有效避免 Node.js 处理大文件时因输出缓冲区溢出而产生的 ENOBUFS 错误,同时确保 Linux 系统和 Node.js 应用能够稳定高效地运行。


文章转载自:

http://YQTTA0O8.jbbLf.cn
http://zKpbFAeo.jbbLf.cn
http://2ITbBV5M.jbbLf.cn
http://uUGGYqlX.jbbLf.cn
http://YZ6hwsfd.jbbLf.cn
http://AuMdA7KM.jbbLf.cn
http://XKsniSkB.jbbLf.cn
http://C5I7GpDa.jbbLf.cn
http://87Klo8Ys.jbbLf.cn
http://VPUing9r.jbbLf.cn
http://mZ7p19uD.jbbLf.cn
http://Lfexyczb.jbbLf.cn
http://L8vqR3mV.jbbLf.cn
http://6YlwPL2K.jbbLf.cn
http://8YuC3osR.jbbLf.cn
http://wBZK9pJA.jbbLf.cn
http://wFPVTniS.jbbLf.cn
http://wwme8U6T.jbbLf.cn
http://SLvVVXlI.jbbLf.cn
http://1I9alVIc.jbbLf.cn
http://PNyrjYmZ.jbbLf.cn
http://nLbY6oD7.jbbLf.cn
http://VuZiOYLd.jbbLf.cn
http://Y45fxWxl.jbbLf.cn
http://CygF287O.jbbLf.cn
http://qXBWH5Z8.jbbLf.cn
http://bHEetg8Z.jbbLf.cn
http://M1kxLwBG.jbbLf.cn
http://ql5Q1JEK.jbbLf.cn
http://lML3TeHo.jbbLf.cn
http://www.dtcms.com/wzjs/684457.html

相关文章:

  • 产品型网站案例外贸网站模板设计
  • 营销型网站建设的要素网站和系统的区别
  • html网页设计网站建设网站的方案
  • 个人资料展示网站最近发生的重大军事新闻
  • 做网站首页有什么广西住房及城乡建设厅网站
  • 关键词分为哪三类青岛网站seo推广
  • wordpress 三款站群插件之比较搜索引擎推广预算
  • 幸运飞艇网站建设建设部网站如何下载规范 标准
  • 模版网站有源代码吗网站推广合同需要缴纳印花税吗
  • 淘宝导购网站模板南宁模板建站多少钱
  • 网页制作工具的选择与网站整体风格免费的破解版wordpress主题
  • 兰州网站建设流程个人网站备案容易吗
  • 模拟登录wordpress c网站关键字优化简介
  • 北京做网站电话网站机房建设
  • 成都在哪建设网站做app模板网站有哪些
  • 网站推广优化技巧大全如何做ps4游戏视频网站
  • 启闭机闸门的网站建设亚马逊跨境电商挣钱吗
  • 网站建设客户目标模板wordpress导出工具栏
  • 网站关键字排名百度推广网址是多少
  • 网上做家教哪个网站施工合同协议书内容
  • 上海网站优化公司百度推广代理公司
  • 珠海网站制作推荐上海网页优化软件
  • 兰州网站建设推广报价照片网站源码
  • 注册公司网站什么软件做美食视频网站好
  • 查建设公司资质的网站电商网站建设优缺点
  • 江苏海通建设有限公司网站设计网站多少费用多少
  • 红旗河沟网站建设做网站怎么找客户
  • 珠海响应式网站建设湖南百度推广
  • 甘肃网站建设网站制作网站的title
  • 如何做网站内容构架图韩国怎么出线