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

Prevent your Heroku Dyno from killing your Node app because of high memory consumption.

  • 1.0.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
78
increased by18.18%
Maintainers
1
Weekly downloads
 
Created
Source

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 nodeas 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

Keywords

FAQs

Package last updated on 04 Jul 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

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