https://github.com/yisibell/pm2-perfmonitor
A pm2 module for performance monitor
https://github.com/yisibell/pm2-perfmonitor
monitor pm2 pm2-module zombie
Last synced: 3 months ago
JSON representation
A pm2 module for performance monitor
- Host: GitHub
- URL: https://github.com/yisibell/pm2-perfmonitor
- Owner: yisibell
- License: mit
- Created: 2026-02-11T09:45:21.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-12T13:44:28.000Z (3 months ago)
- Last Synced: 2026-03-12T17:52:02.316Z (3 months ago)
- Topics: monitor, pm2, pm2-module, zombie
- Language: JavaScript
- Homepage:
- Size: 135 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# pm2-perfmonitor
A pm2 module for **zombie process** and **CPU overload** detection.
# Features
- Automatically detect **zombie** processes and restart it.
- Monitor the number of zombie process restarts (`pm2 monit`).
- [Added in v2] Support **CPU overload** protection (automatic restart + `perf` collection).
- [Added in v2] Monitor the number of CPU Overload process restarts (`pm2 monit`).
# Installation
```bash
# install or update
$ pm2 install pm2-perfmonitor
# uninstall
$ pm2 uninstall pm2-perfmonitor
```
> NOTE: the command is `pm2 install` NOT `npm install`
# Configure
| Property | Defaults | Description | Supported |
| :-----------------------------: | :-----------------: | :-----------------------------------------------------------------------------------------------------: | :----------: |
| `enabled` | `true` | Specify whether to enable this module | v1 and above |
| `excludeApps` | - | Specify the application name that needs to be excluded from guardianship | v1 and above |
| `includeApps` | - | Specify the application name that needs to be guarded | v1 and above |
| `workerInterval` | `60000` | Timed task execution interval (ms) | v1 and above |
| `zombieDetection` | `true` | Specify whether to enable zombie process protection | v1 and above |
| `zombieMaxHits` | `10` | Specify the maximum occurrence frequency of zombie status | v1 and above |
| `autoRestartWhenZombieDetected` | `true` | Specify whether to automatically restart zombie processes | v1 and above |
| `zombieMaxRestarts` | `0` | Specify the maximum number of restarts for zombie processes (set to `0` to indicate no limit) | v1 and above |
| `cpuOverloadDetection` | `false` | Specify whether to enable CPU overload protection | v2 |
| `cpuOverloadThreshold` | `90` | Specify the threshold for determining CPU overload | v2 |
| `cpuOverloadMaxHits` | `5` | Maximum number of consecutive occurrences of CPU overload allowed (automatically restarts when reached) | v2 |
| `enableNodeInspectorCollection` | `false` | Specify whether to enable `node:inspector` performance collection | v2 |
| `nodeInspectorSampleDuration` | `10` | Specify the performance collection duration (s) for `node:inspector` | v2 |
| `enablePerfCollection` | `false` | Specify whether to enable `perf` performance collection | v2 |
| `perfReportGenerationDir` | `/var/log/pm2/perf` | Specify the directory for generating performance reports for `perf` | v2 |
| `flamegraphDir` | `/opt/FlameGraph` | Specify the directory for `flamegraph` flame map generation tool | v2 |
| `perfSampleDuration` | `10` | Specify the sampling duration (s) for `perf` | v2 |
| `perfSampleFrequency` | `99` | Specify the sampling frequency (Hz) for `perf` | v2 |
> Please see the details for all configurable options:[Default Options](./lib//defaults.js)
# How to set these values ?
After having installed the module you have to type : `pm2 set pm2-perfmonitor: `
**e.g:**
- `pm2 set pm2-perfmonitor:includeApps myNuxtApp1, myNextApp2` (Only detect applications named `myNuxtApp1` and `myNextApp2`)
- `pm2 set pm2-perfmonitor:workerInterval 120000` (Check every `2` minutes)
- `pm2 set pm2-perfmonitor:cpuOverloadDetection true`(enable **CPU overload** protection)
- `pm2 set pm2-perfmonitor:zombieProcessDetectionStrategy zombie-state-and-zero-cpu`(Set the strategy for detecting zombie processes to: system process status is **Z** and CPU usage is consistently **0%**)