【问题标题】:NodeJS: Why pm2 list shows memory keeps on increasing?NodeJS:为什么 pm2 list 显示内存不断增加?
【发布时间】:2015-04-17 07:27:36
【问题描述】:

我在 NodeJS 中使用 HAPI.JS 框架并创建了一个代理。认为代理意味着我只是在 redis 中维护会话。除此之外,我没有在代码中做任何事情。可能唯一的事情是我每 3 分钟使用 setInterval 记录我的 process.memoryUsage()。

我的问题:

  1. 为什么我的记忆力不断增加?
  2. 会掉下来吗?
  3. 这是因为 setInterval 一直在记录进程使用情况吗?
  4. 这是因为控制台记录了每个请求和响应吗?
  5. 我的 Redis 数据库一直保持打开状态,直到我的服务器崩溃,这会导致这种情况吗?
  6. 我是否需要使用流程管理器(如 new relic 或 strong loop)来识别这一点?
  7. 那么这段记忆会持续增加多久,在某些时候它必须停止(我想知道那是哪一点?)
  8. 我正在使用池概念使用 MSSQL 事务的 sequelize?池化能做到这一点吗?

PS 我是节点 JS 的新手。

【问题讨论】:

  • 你能展示你的代码吗?听起来好像不是那么多。
  • @pkyeck 对不起,伙计。无法显示我的代码。这是我的实现,路由列表,每个路由调用另一个服务器并将响应提供给客户端。我正在使用请求模块来调用另一台服务器。我所有的路由都受到基于令牌的身份验证的保护。
  • 您的应用程序正在泄漏内存,但没有看到源代码,无法说出原因。您可以尝试按照以下步骤查找泄漏:github.com/felixge/node-memory-leak-tutorial
  • @pkyeck 你能告诉我从上述问题列表中发生的事情吗?

标签: javascript node.js


【解决方案1】:
  1. 为什么我的记忆力不断增加?

你有内存泄漏

  1. 会掉下来吗?

有时 GC 会启动并清理一些东西(没有泄漏)

  1. 这是因为 setInterval 一直在记录进程使用情况吗?

通常不会,但是没有看到代码我不能肯定地说这个

  1. 这是因为控制台记录了每个请求和响应吗?

通常不会,但是没有看到代码我不能肯定地说这个

  1. 我的 Redis 数据库一直保持打开状态,直到我的服务器崩溃,这会导致这种情况吗?

应该不是问题。

  1. 我是否需要使用 new relic 或 strongloop 等流程管理器来识别这一点?

这是一种方法……但也有其他方法。

  1. 那么这段记忆会持续增加多久,在某些时候它必须停止(我想知道那是哪一点?)

取决于服务器设置。多少 RAM + 正在运行的其他内容等。

  1. 我正在使用池概念使用 MSSQL 事务的 sequelize?池化能做到这一点吗?

通常不会,但是没有看到代码我不能肯定地说这个

也许这篇文章可以帮助您找到漏洞:
https://www.nearform.com/blog/how-to-self-detect-a-memory-leak-in-node/

【讨论】:

  • 但是没有看到代码我不能肯定地说——野人哈哈
  • 我在这里也有同样的情况。在没有 pm2 的情况下运行它(只是“node index.js”)它在不增加内存的情况下运行,奇怪的是我的 adonisjs 和 express 服务工作正常,似乎 hapi.js 和 pm2 之间不兼容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2015-12-06
  • 2014-11-13
相关资源
最近更新 更多