Node.JS PM2 内存泄漏

2024-04-08

我正在运行我的服务器pm2 start ... and pm2 monit正在向我展示3GB memory2个小时之后。所以我附加了memwatch,现在我又等了2个小时,再次显示内存pm2 monit到达3GB.

因此,我检查了 memwatch 生成的日志。给我看了:

{ before: { nodes: 75659, size_bytes: 11141702, size: '10.63 mb' },
  after: { nodes: 73226, size_bytes: 10840598, size: '10.34 mb' },
  change:
   { size_bytes: -301104,
     size: '-294.05 kb',
     freed_nodes: 5141,
     allocated_nodes: 2708,

还有另一个:

{ before: { nodes: 72591, size_bytes: 10728318, size: '10.23 mb' },
  after: { nodes: 73284, size_bytes: 10798062, size: '10.3 mb' },
  change:
   { size_bytes: 69744,
     size: '68.11 kb',
     freed_nodes: 5931,
     allocated_nodes: 6620,

现在我真的很困惑,这些是最后的日志,所以我很确定这些是生成的日志pm2 monit显示出巨大的内存泄漏。

那么,为什么是memwatch给我看10MB+内存和 pm2 监视器显示3GB+?


现在切换到类似的东西forever or monit http://mmonit.com/monit/看看泄漏是否仍然存在。


多一点背景

  • 我一直在尝试分析并找到泄漏,并且配置文件上并没有显示任何泄漏。
  • memwatch diff 在客户端连接时启动,并在客户端断开连接时获取差异。

有很多的特别糟糕在此线程上的答案。真的,真的很糟糕。

答案很简单:你的代码有内存泄漏,你需要找到并删除它,而且 GC 出错的可能性很小,罪魁祸首很可能是你的代码。

所以首先:

  1. "我发现 PM2 垃圾收集器不起作用“ - 这是 显然是荒谬的,PM2运行节点,它使用V8,它有它的 内置自己的垃圾收集器。这并不仅仅因为您而被禁用 运行 PM2。
  2. "所以直到问题解决之前调用 GC“ - 不!如果你的代码有泄漏,手动调用 GC 是懒惰的行为,你应该修复它们。
  3. "删除 pm2 后,暂时不再有内存泄漏。“ - 不,你只是没有在 PM2 中监视它;泄漏仍然存在,你只是看不到错误,因为你使用节点运行它而不是查看结果。

其次,实际的解决方案应该是:

使用您的工具分析代码的内存和 CPU 使用情况 选择。对于大多数人来说,这将是 Chrome 的调试工具 连接到正在运行的节点实例,看看有哪些功能 导致内存使用量激增。只需手动调用 GC 很懒,因为你的代码仍然存在泄漏,但你只是告诉 V8 在应用程序泄漏内存后不断地清理内存,这是非常懒惰的做法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.JS PM2 内存泄漏 的相关文章

  • TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是 Function 类型

    我这里有一个小问题 events js 200抛出新错误 ERR INVALID ARG TYPE listener Function listener 类型错误 ERR INVALID ARG TYPE 侦听器 参数必须是类型 功能 收到
  • 通过 PHP 连接到 socket.io(nodejs)

    我需要通过 php 连接到 websocket 发送数据并立即断开连接 无需等待套接字的响应 我用了大象io http elephant io 但更新库后不起作用 请告诉我如何通过 PHP 连接到 websocket 我也遇到了这个问题 学
  • Node.js Async/Await 模块导出 [重复]

    这个问题在这里已经有答案了 我对模块创建有点陌生 想知道 module exports 并等待异步函数 例如 mongo connect 函数 完成并导出结果 在模块中使用 async await 正确定义了变量 但是当尝试通过要求模块来记
  • Nodejs Express 隐式中间件应用于所有路由?

    我想知道 Express 是否允许我创建一个默认调用的路由中间件 而无需我将其明确放置在 app get arg 列表中 NodeJS 新手 var data title blah So I want to include this in
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • Node.js - 生成的进程正在生成错误“execvp():没有这样的文件或目录”

    我有以下代码 旨在生成并分离子进程 它只是同一目录中的另一个 node js 脚本 这是我正在运行的确切代码 var fs require fs var child require child process var out fs open
  • 使用 Nodemailer 提交电子邮件时 NodeJs 错误

    我已按照以下步骤设置 Nodemailer 1 允许访问 Gmail 中安全性较低的应用程序 2 在app js中写入以下内容 app post reachus send function req res var transporter n
  • 限制 Axios 请求

    我正在使用 axios 向 Deezer API 发出请求 不幸的是 使用 Deezer 的 API 当您请求艺术家的专辑时 它不包括专辑曲目 因此 我正在通过请求艺术家的专辑 然后对每个专辑执行后续的 axios 请求来解决这个问题 我遇
  • 使用无服务器访问 SSM 变量

    我想用无服务器变量中的 SSM 参数 https serverless com blog serverless v1 22 0 按照文档 我运行了以下命令 aws ssm put parameter name foo value bar t
  • Nodemailer发送日历事件并将其添加到谷歌日历

    我正在尝试使用 nodemailer 将日历事件发送到 Gmail 帐户 这是我的代码 let transporter nodemailer createTransport host smtp gmail com port 587 secu
  • Node.js Express 4.0 中的 res.render 回调参数的用途是什么?

    目的是什么res render回调参数 在什么情况下 由于模板已被指定为第一个参数 因此人们会想要使用这样的回调参数 这是文档中的代码 send the rendered view to the client res render inde
  • Node 不断恢复到旧版本

    每次我在控制台中重新启动 vagrant 时 它都会询问我的登录详细信息 然后说Now using node v7 10 0 npm v4 2 0 当我做run nvm install node I get v13 11 0 is alre
  • 电子应用程序可以播放本地支持的任何视频吗?

    我知道浏览器通常会限制玩家mp4 and webm类型的媒体 但我想知道基于电子的应用程序是否可以运行 MKV 和 AVI 等格式的本地视频 我找不到明确的来源来告诉我什么是可用的 什么是不可用的 Electron 仍然仅限于网络技术 这意
  • 将随机字节转换为整数范围 - 如何?

    我试图通过读取 crypto randomBytes 来获取一定范围内的随机整数 现在 我的问题是我不知道如何从该字节流中读取整数 我想生成一个范围只是 丢弃 不在范围内的整数的问题 有任何想法吗 您可以从以下位置获取一个 32 位整数cr
  • 使用 Socket.io 向多个房间发送消息?

    是否可以使用socket io向多个房间发送消息 发送至 1 个房间 io sockets in room emit id 发送到N个房间 io sockets in room1 room2 roomN emit id 是的 可以同时发送到
  • Nodejs - 检查隐藏文件

    我正在迭代文件目录 想知道是否可以测试文件是否隐藏 目前 我只是检查文件是否以 开头或不 这适用于 Mac 也许还有 Linux 但是 我想知道如何在 Windows 上做到这一点 另外 句点会在所有版本的 Linux 中隐藏该文件吗 Th
  • Docker - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306

    我正在尝试使用 Docker 容器启动并运行我的 Nodejs 应用程序 我不知道可能出了什么问题 当我使用控制台调试凭据时 凭据似乎已正确传递 另外启动sequel pro并使用相同的用户名和密码直接连接似乎也可行 当节点在容器中启动时
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String

随机推荐

  • Git:如何合并多年来分歧很大的复杂分支

    我目前已经将一个巨大的项目从 SVN 导入到 Git 我决定压平所有分支 只保留 2 个 主分支和分歧分支 Master A B C D X Y Bugfix Diverged E F G H diverged包含很多不同的源代码 但有些部
  • 为什么我无法在 Windows 上 ping 通 docker 容器?

    不要将其标记为重复 因为我查看了其他答案 但它不能解决我的问题 我正在使用 Windows 7 和 docker 工具箱 我正在做这个教程 https learn microsoft com en us dotnet csharp tuto
  • 破坏用户空间是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这可能是一个简单的问题 但是 我听说在内核上工作的唯一规则是不要破坏 用户空间 所以我想知道这意味着什么 打破用户空间这是怎么发生的 Ed
  • React-Bootstrap 下拉菜单组件上的自定义样式

    我正在尝试将自定义 css 样式应用到 React Bootstrap 组件 但无法弄清楚如何访问组件 JSX 中不明确的元素 例如
  • 如何禁用 NSScrollView 的垂直滚动?

    如何禁用 NSScrollView 的垂直滚动 我在 Google 上找不到快速解决方案 Thanks 在 NSScrollView 子类中试试这个 void scrollWheel NSEvent theEvent super scrol
  • 确定属性是否为 EF Core 中的导航属性

    我正在构建一个简单的更改跟踪器来捕获对 Sql Azure 数据库的所有编辑 不幸的是 据我所知 Sql Azure 本身不支持此功能 我正在遍历 ChangeTracker 返回的修改条目列表 foreach EntityEntry en
  • Android 和 iOS 如何扫描蓝牙信标而不出现电池问题?

    如果我想在 Android 或 IOS 中开发自己的 iBeacon 服务 它必须实用 这意味着客户可以使用我的服务而不会出现电池短缺的情况 我认为即使 iBeacon 技术基于蓝牙低功耗 它仍然可能缺乏电池 这是因为应用程序必须始终运行才
  • PIT未发现突变

    C Users TZ gt java cp C Users TZ Desktop femr master pitest command line 1 2 4 jar C Users TZ Desktop femr master pitest
  • 检查 JSON 对象中的值

    我需要查明 id 是否出现在我的 JSON 对象中 例如 requested 2009 07 25T14 12 25 01 00 channels id 1 name General created 2009 07 25 14 00 02
  • 声明静态成员的类装饰器(例如,对于 log4net)?

    我正在使用 log4net 我们的代码中有很多这样的内容 public class Foo private static readonly ILog log LogManager GetLogger typeof Foo 一个缺点是 这意味
  • 如何使用oauth2访问StackExchange API?

    我正在按照此处提到的说明进行操作 https api stackexchange com docs authentication https api stackexchange com docs authentication 但由于没有提供
  • KnockoutJS - 打印迭代索引作为输入名称

    我正在尝试结合 Spring MVC 创建我的第一个 KnockoutJS 表单视图 ModelAttribute捆绑 数据通过 Ajax 加载并使用 KnockoutJS 填充 通过 KnockoutJS 添加数据 通过 Ajax 和 K
  • 如何在 Matplotlib 中的 x 轴上分配相等的缩放比例?

    我目前拥有的是这样的 x 3 0 4 0 5 0 5 0 6 0 7 0 9 0 9 0 9 0 11 0 y 6 0 5 0 4 0 2 5 3 0 2 0 1 0 2 0 2 5 2 5 生成以下图表 我想要的是在我的轴上具有相同的缩放
  • 错误:无法使用反射定义类

    我正在用这个制作应用程序webpage https hackernoon com a guide to tdd a react redux todolist app part 1 b8a200bb7091 我尝试测试 e2e tests 但
  • 有没有便宜或免费的 VB6 编程 IDE? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 NSNumber 是不可变的?

    为什么 NSNumber 是不可变的 有充分的理由吗 因为现在我正在考虑创建自己的类只是为了可变性 一个数字是一个very基本数据类型 数字就是一个数字 如果你改变它 它就会变成别的东西 数字根本无法改变 与更复杂的数据相比 对象本身仍然代
  • WPF RadioButton InverseBooleanConverter 不工作

    我有两个 RadioButtons 我将它们绑定到 ViewModel 中的布尔属性 不幸的是 我在转换器中收到错误 因为 targetType 参数为空 现在我并不期望 targetType 参数为空 我期望 True 或 False 但
  • 仅将唯一项目添加到列表中

    当远程设备通过网络宣布自己时 我将其添加到列表中 我只想将之前未添加过的设备添加到列表中 这些公告是通过异步套接字侦听器发出的 因此添加设备的代码可以在多个线程上运行 我不确定我做错了什么 但无论我尝试什么 最终都会出现重复 这是我目前拥有
  • 开源项目如何实现有效的民主治理? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何成功实施民主 非BDFL http en wikipedia org wiki Benevolent Dictator For L
  • Node.JS PM2 内存泄漏

    我正在运行我的服务器pm2 start and pm2 monit正在向我展示3GB memory2个小时之后 所以我附加了memwatch 现在我又等了2个小时 再次显示内存pm2 monit到达3GB 因此 我检查了 memwatch