运行Node.js(在Windows R2服务器上):如何减少我的grunt任务消耗的RAM量?

时间:2015-07-20 16:18:36

标签: javascript node.js mongodb gruntjs windows-server-2012-r2

我有两个环境:一个是一个咕噜咕噜的环境,可以处理每周进入实时生产数据库的进程。另一个是带有生产数据库的实时应用程序。

我最近在Grunt中进行了一些优化,以更好的方式处理和存储数据,从而实现更快的应用程序和更好的整体用户体验。我的问题是,我在每周制作期间所做的处理耗费了大量内存,大约需要10个小时。我很好,花了10个小时,但我的问题是内存使用率上升到95%左右,实时应用程序的响应时间开始爬行,在grunt进程完成之前几乎没有响应。

我的问题是......如果不添加额外的RAM(现在是8GB),我如何让Grunt在不影响实时应用程序用户体验的情况下运行此过程?感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:1)

我认为"正确"这里的答案是使用另一台机器。出于这个原因,您不应该在为生产网站提供服务的同一台计算机上运行批量处理任务 - 它们往往会消耗所有可用资源,而不会为Web服务器留下任何剩余资源。

如果 - 无论出于何种原因 - 另一台机器不是一个选项,那么您需要诊断为什么您的批量任务消耗了这么多内存。 node-inspectormemwatch是开始的好地方。这些将允许您检查JavaScript堆以查看内存中的内容。

但是,JS堆通常限制在介于1到1.9 GB之间(取决于节点版本),因此如果您的批量任务使用的不止于此,则有几种可能性:

  1. 涉及多个节点子进程。
  2. 您的节点进程正在JS堆外部分配大量内存。这通常意味着你有很多(和/或一些非常大的)Buffer没有被处置。
  3. 您可能正在使用泄漏内存的本机(C ++)模块。