2015-07-20 46 views
0

我有2个环境:一个是处理每周进程的咕噜环境,这个进程将进入现场生产数据库。另一个是带有生产数据库的实时应用程序本身。运行Node.js(在Windows R2服务器上):如何减少我的咕噜任务消耗的RAM数量?

我最近在Grunt中进行了一些优化,以更好的方式处理和存储数据,从而实现了更快的应用程序和更好的整体用户体验。我的问题是,我在每周生产过程中进行的处理耗费大量内存,并且需要大约10个小时。我确定需要10个小时,但我的问题是内存使用率高达95%左右,实时应用程序的响应时间开始爬行,直到咕噜声过程完成时才有响应。

我的问题是......没有增加额外的内存(现在是8GB),我该如何让Grunt在不影响用户体验的情况下运行这个过程?感谢您提供的任何建议。

回答

1

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


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

然而,JS堆通常仅限于某处1和1.9 GB(取决于节点版本),因此,如果您的批量任务是使用不止这些,有几种可能性之间:

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