PM2 is a Production Runtime and Process Manager for Node.js applications with a built-in Load Balancer.
It allows you to keep applications alive forever, to reload them without downtime and facilitate common Devops tasks.
Starting an application in production mode is as easy as:
$ pm2 start app.js
PM2 is constantly assailed by more than 1800 tests.
Official website: https://pm2.io/doc/
Works on Linux (stable) & macOS (stable) & Windows (stable).
All Node.js versions are supported starting Node.js 4.X.
Installing PM2
$ npm install pm2 -g
npm is a builtin CLI when you install Node.js - Installing Node.js with NVM
Start an application
You can start any application (Node.js, Python, Ruby, binaries in $PATH...) like that:
$ pm2 start app.js
Your app is now daemonized, monitored and kept alive forever.
More about Process Management
Container Support
With the drop-in replacement command for node
, called pm2-runtime
, run your Node.js application in a hardened production environment.
Using it is seamless:
RUN npm install pm2 -g
CMD [ "pm2-runtime", "npm", "--", "start" ]
Read More about the dedicated integration
Managing Applications
Once applications are started you can manage them easily:
To list all running applications:
$ pm2 list
Managing apps is straightforward:
$ pm2 stop <app_name|id|'all'|json_conf>
$ pm2 restart <app_name|id|'all'|json_conf>
$ pm2 delete <app_name|id|'all'|json_conf>
To have more details on a specific application:
$ pm2 describe <id|app_name>
To monitor logs, custom metrics, application information:
$ pm2 monit
More about Application Management
Cluster Mode: Node.js Load Balancing & Zero Downtime Reload
The Cluster mode is a special mode when starting a Node.js application, it starts multiple processes and load-balance HTTP/TCP/UDP queries between them. This increase overall performance (by a factor of x10 on 16 cores machines) and reliability (faster socket re-balancing in case of unhandled errors).
Starting a Node.js application in cluster mode that will leverage all CPUs available:
$ pm2 start api.js -i <processes>
<processes>
can be 'max'
, -1
(all cpu minus 1) or a specified number of instances to start.
Zero Downtime Reload
Hot Reload allows to update an application without any downtime:
$ pm2 reload all
Seamlessly supported by all major Node.js frameworks and any Node.js applications without any code change:
More informations about how PM2 make clustering easy
Terminal Based Monitoring
Monitor all processes launched straight from the command line:
$ pm2 monit
Log Management
To consult logs just type the command:
$ pm2 logs
Standard, Raw, JSON and formated output are available.
Examples:
$ pm2 logs APP-NAME
$ pm2 logs --json
$ pm2 logs --format
$ pm2 flush
$ pm2 reloadLogs
More about log management
Startup Hooks Generation
PM2 can generates and configure a Startup Script to keep PM2 and your processes alive at every server restart.
Init Systems Supported: systemd, upstart, launchd, rc.d
$ pm2 startup
$ pm2 save
$ pm2 unstartup
More about Startup Hooks
Updating PM2
$ npm install pm2@latest -g
$ pm2 update
PM2 updates are seamless
Ready to Scale? Go further with PM2 Plus!
PM2
Plus Edition
$ pm2 plus
Once you scale you need to make sure that your application is running properly, without bugs, performance issues and without downtimes.
That's why we created PM2 Plus. It's a set of advanced features for both hardening the PM2 Runtime and monitoring applications in production.
With PM2 Plus you get:
- A Real-time Monitoring Web Interface
- Smart Exception Reporting
- Production Profiling for Memory and CPU
- PM2 Runtime High Availability Fallback
And much more like realtime logs, custom metrics, remote actions...
You can also create account via the app: here
PM2 Plus Features
Visual Memory Snapshots:
CPU FlameGraphs:
Multi Server Overview:
PM2 Plus: Expose Custom Metrics
To get more insights on how your application behave, plug custom metrics inside your code and monitor them with the pm2 monit
command:
In your project install pm2-io-pm:
$ npm install @pm2/io --save
Then plug a custom metric:
const io = require('@pm2/io');
let counter = 1;
const latency = io.metric({
name : 'Counter',
value : function() {
return counter;
}
});
setInterval(() => {
counter++;
}, 1000);
PM2 Plus: Module system
PM2 embeds a simple and powerful module system. Installing a module is straightforward:
$ pm2 install <module_name>
Here are some PM2 compatible modules (standalone Node.js applications managed by PM2):
pm2-logrotate automatically rotate logs and limit logs size
pm2-server-monit monitor the current server with more than 20+ metrics and 8 actions
CHANGELOG
CHANGELOG
Contributors
Contributors
License
PM2 is made available under the terms of the GNU Affero General Public License 3.0 (AGPL 3.0).
For other licenses contact us.