Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

heroku-node-settings

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

heroku-node-settings - npm Package Compare versions

Comparing version 1.0.1 to 1.0.2

4

package.json
{
"name": "heroku-node-settings",
"version": "1.0.1",
"description": "Run node on Heroku with optimized defaults for memory management.",
"version": "1.0.2",
"description": "Prevent your Heroku Dyno from killing your Node app because of high memory consumption.",
"main": "index.js",

@@ -6,0 +6,0 @@ "bin": {

@@ -1,2 +0,48 @@

# heroku-node-settings
# Heroku Node Settings
Since Node 2, the default garbage collection settings allow the app to consume up to 1.5GB before garbage collection occurs. In Heroku this is specially problematic as it might kill your app before that limit is reached (smaller dynos do not have such amount of memory).
As Heroku provides an environment variable `$WEB_MEMORY` to let the system know what the limit is, you can start your app passing the appropriate flags so that this limit is never reached.
## Installation
```
npm install --save heroku-node-settings
```
## Usage
If you are using the default start mechanism in Heroku (`npm start`) then you only need to change the `start` command in your `package.json` so that it uses `heroku-node-settings` instead of `node`.
```
{
"name": "my-proyect",
"version": "0.0.1",
"description": "A web app that does not get killed by high memory consumption in Heroku.",
"main": "server/bin/web.js",
"repository": "https://github.com/myuser/myproyect.git",
"scripts": {
"test": "grunt test",
"start": "heroku-node-settings server/bin/web.js"
}
}
```
Note that any arguments you pass into this command will be used when calling `node`as well.
If you're using a Procfile, be sure to include the path: `node_modules/.bin/heroku-node-settings`.
## How does it work
Essentially, the script uses the following V8 flags to start node. The values of these flags depends on the `$WEB_MEMORY` the dyno has. Check the source for the details.
- `--max_semi_space_size`: Sets how much memory can new memory allocations take (in `megabytes` ). This flag used to be called `--max_new_space_size` (see https://codereview.chromium.org/271843005).
- `--max_old_space_size`: Sets the upper limit of memory node can use. The problem is that if your app reaches this value then Node will crash (memory allocation errors will start to show in the logs).
- `--max_executable_size`: Max size of executable memory. It is smaller than the `max_old_space_size` so that your Node app will never reach the limit.
Also note that, although these settings constrain the memory usage, there are other elements that can make the whole process use more memory that what these flags set (buffers, files, etc.).
## Acknowledgments
* I took the script from @joanniclaborde on this thread: https://github.com/nodejs/node/issues/3370#issuecomment-158521878
* I took the idea of an NPM package from Heroku-Node: https://github.com/lanetix/heroku-node
* These were very useful links:
- https://strongloop.com/strongblog/node-js-performance-garbage-collection/
- https://groups.google.com/forum/#!topic/v8-users/qznbdM9Bio4
- https://groups.google.com/forum/#!topic/nodejs/sxkqPtC-3Jk
- http://stackoverflow.com/questions/30252905/nodejs-decrease-v8-garbage-collector-memory-usage
- http://erikcorry.blogspot.com.ar/2012/11/memory-management-flags-in-v8.html
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc