在本地服务器上复制heroku / node.js内存泄露以进行debugging
如何在本地复制Heroku的内存问题进行debugging? 或更好的configuration文件内存使用Heroku?
我在Heroku上有一个Node.js应用程序。 一个服务器端实用程序做了一堆工作来生成用于用户项目的下载文件。 对于一个特别大的情况,Heroku经过一些练习后会产生以下警告:
Process running mem=529M(103.4%) 2015-01-24T02:23:18.240108+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:23:18.240108+00:00 heroku[web.1]: Process running mem=529M(103.4%) ...
在每次额外的锻炼之后,记忆的使用会增加,所以在我看来就像一个确定的泄漏:
2015-01-24T02:31:22.321689+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:31:22.321689+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:31:44.523511+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:31:44.523800+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2015-01-24T02:32:06.296071+00:00 heroku[web.1]: Process running mem=747M(145.9%) 2015-01-24T02:32:06.296314+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
但是我无法在本地复制。
根据https://github.com/felixge/node-memory-leak-tutorial来运行性能分析工具v8-profiler
和node-inspector
,堆的使用量在每个练习中短暂地增加到156MB,但是直接回到了1MB以下。 我可以无休止地调用该实用程序,并获得相同的结果没有内存错误。
至less,限制内存使用的正确select是什么? 该文件说这个选项是以字节为单位指定的,但是应用程序没有使用下面的投诉,所以我怀疑这个选项被忽略:
node --debug --max-stack-size=512 app
虽然node --help
在第一个屏幕上显示了--max-stack-size=[bytes]
,但限制mem用法的参数是--max-old-space-size=[Mbytes]
。
node --max-old-space-size=512 app.js
这足以在本地重新创build内存不足错误。