npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

pm2-autoscale

v1.4.0

Published

PM2 module to help dynamically scale applications based on utilization demand

Downloads

865

Readme

PM2-Autoscale npm version

PM2 is a module that helps dynamically scale applications based on utilization demand.

Motivation

By default, PM2 runs the application with a specified number of instances, which is not suitable when you have a few applications on one server with many CPUs, and you cannot predict which application will load your server. For example, if you have 48 CPUs and you run the application with instances=max, PM2 will run 48 instances, and every instance usually uses at least 100Mb of memory (~5GB for all instances). So, if you have 10 applications, it means you will use about 50GB of server memory without server load.

Solution

The module helps dynamically increase application instances depending on CPU utilization of every application. You can run your application with the minimum required instances. When the module detects that CPU utilization is higher than scale_cpu_threshold, it will start increasing instances to a maximum of CPUs-1 or max_instances (if set in the module config), provided that the server has available free memory. When the module detects that CPU utilization is decreasing, it will stop the unnecessary instances.

Install

pm2 install pm2-autoscale

Uninstall

pm2 uninstall pm2-autoscale

Module Configuration

Default settings:

  • scale_cpu_threshold Maximum value of CPU utilization one of application instances when the module will try to increase application instances. (default to 30)
  • release_cpu_threshold Average value of all CPUs utilization of the application when the module will decrease application instances (default to 5)
  • ignore_apps Global setting to skip app by name from the autoscale. You can enter multiple apps names separated by comma (default to "" - empty string)
  • max_workers The maximum number of application instances this module will spawn up to. If set to 0 or max - the maximum number of instance will be the total number of CPUs (default to -1)
  • min_seconds_to_add_worker The minimum number of seconds between spawning new application instances if the load is high CPU utilization is high enough (defaults to 10)
  • min_seconds_to_release_worker The minimum number of seconds between closing application instances if the CPU utilization is low enough (defaults to 30)
  • debug Enable debug mode to show logs from the module (default to false)

To modify the module config values you can use the following commands:

pm2 set pm2-autoscale:debug true
pm2 set pm2-autoscale:scale_cpu_threshold 50
pm2 set pm2-autoscale:ignore_apps app1,app2

Specific app configuration

If you want to configure specific settings for each of your apps, you can do it by changing the env variable, for example, in your ecosystem.config file.

Have a look at the example below:

{
    "apps": [
        {
            "name": "testapp",
            "script": "build/app.js",
            "instances": "4",
            "autorestart": true,
            "watch": false,
            "max_memory_restart": "1024M",
            "vizion": false,
            "exec_mode": "cluster",
            "env": {
                "pm2_autoscale": {
                    "is_enabled": true,
                    "scale_cpu_threshold": 95,
                    "release_cpu_threshold": 50,
                    "max_workers": 5
                }
            }
        }
    ]
}

Change log

Version 1.4.0

  • Add new config option max_workers. The maximum number of application instances this module will spawn up to
  • Add new config option min_seconds_to_add_worker. The minimum number of seconds between spawning new application instances
  • Add new config option min_seconds_to_release_worker. The minimum number of seconds between closing application instances

All options are also available for app specific settings in the ecosystem.config file.

Version 1.3.0

  • Add new config option ignore_apps exclude apps from autoscale
  • Add specific app configuration for scale_cpu_threshold and release_cpu_threshold in env section of your ecosystem.config file.