我有一个相对简单的节点js应用程序(基本上只是expressjs + mongoose)。它目前在Ubuntu服务器上正在运行,每天提供大约20,000页的页面浏览量。
最初,应用程序在具有512 MB内存的计算机上运行。在注意到服务器本身经常崩溃时,我怀疑应用程序可能内存不足,情况确实如此。
我已将应用程序移动到具有1 GB内存的服务器。我一直在监视应用程序,在几分钟内,应用程序往往会达到大约200-250 MB的内存使用量。在更长的时间内(例如10小时以上),似乎数量持续增长非常缓慢(我还在调查)。
此后我一直试图找出消耗内存的东西。我一直在浏览我的代码,并没有发现任何明显的内存泄漏(例如未封闭的数据库连接等)。
我使用node-heapdump
实现了一个方便的heapdump函数,现在我已启用--expore-gc
来手动触发垃圾回收。我不时尝试触发一个手动GC来查看内存使用情况会发生什么,但似乎没有任何效果。
我也尝试过不时分析堆积 - 但我不确定我所看到的是否正常。我确实觉得有一个条目有93%的保留大小 - 但它只指向"内置和#34; (不确定这意味着什么)。
在检查第二高保留大小(缓冲区)时,我可以看到它链接回相同的"内置"通过一些Native Code中的setTimeout函数。我怀疑它与缓存或https相关(_cache
,slabBuffer
,tls
)。