现在,我正在将Node.js应用程序部署到生产环境中,我必须确保它始终是完美无缺的.我原来以为让我的应用程序每天重新启动一次.然后我做了一些研究,以找到关于Node.js中的碎片问题的一些线索.我唯一发现的是an article describing GC in V8的段落:
To ensure fast object allocation,short garbage collection pauses,and
the “no memory fragmentation V8” employs a stop-the-world,
generational,accurate,garbage collector.
这个说法真的不足以让我放弃为我的应用程序建立重新启动机制,但另一方面,如果没有问题,我不想做一些工作.
所以我的问题是:
应该还是不应该重新启动我的应用程序,以防止分裂?
解决方法
要确定您是否需要重新启动服务器,建议您执行以下操作:
>设置一些监控工具,如https://newrelic.com/,让您的监视器的性能.
>连续监视你的记忆.尝试看看消耗的内存量是否稳定增加,或者如果它消失了.
>在您需要采取行动之前决定可接受的门槛.例如,一旦您的应用程序消耗了60%的系统内存,您需要开始考虑服务器重新启动并决定重新启动间隔.
>确定在重新启动服务器时是否有“停机时间”是否正常.如果您不想停机,您可能需要构建代理层来引导流量.
一般来说,我建议服务器重新启动所有动态垃圾收集语言.这在这些类型的大型应用中是相当普遍的.几乎不可避免的是,你的代码库中的某个小错误,或者你依赖的一个库会泄漏内存.即使你修复了一个泄漏,最终会得到另一个泄漏.这可能会阻碍您的团队,这将基本上导致服务器重新启动策略,以及关于应用程序的内存消耗可接受的定义.