SysMonitor 2.0.1 is out: auto-optimization on Windows, Linux and macOS Lower CPU load with one flag: sudo sysmonitor start -o Open source under the MIT license. Star it or send a pull request
Documentation

Monitor your system. Optimize what slows it down.

Everything you need to build, run and tune SysMonitor 2.0.1 on Windows, Linux and macOS.

Introduction

SysMonitor is a command-line tool written in C++11. It samples CPU, memory and running processes on a fixed interval and redraws a color-coded display in your terminal. With auto-optimization turned on, it lowers the priority of any process that stays above your CPU threshold.

  • Live CPU and memory readings, with bars that change color as load rises.
  • A table of the ten busiest processes with PID, memory and priority.
  • Optional auto-optimization that never runs unless you pass -o.
  • One codebase for Windows, Linux and macOS.

Installation

SysMonitor is built from source with CMake. Install the tools for your platform first.

Linux

Debian and Ubuntu
sudo apt install build-essential cmake git

On Fedora use sudo dnf install gcc-c++ cmake git. On Arch use sudo pacman -S base-devel cmake git.

macOS

Homebrew
brew install cmake git

Windows

Install Visual Studio 2019 or newer with the C++ tools, or MinGW-w64, plus CMake 3.15 or newer. With Chocolatey:

PowerShell (Administrator)
choco install git cmake mingw -y

Build

Terminal
git clone https://github.com/AccoladesIO/sysmonitor.git
cd sysmonitor
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release

The binary is written to build/bin/sysmonitor. To install it system-wide on Linux or macOS, run sudo cmake --install .. With MinGW on Windows, add -G "MinGW Makefiles" to the cmake .. command. With Visual Studio, use -G "Visual Studio 16 2019" -A x64.

Quick start

Terminal
sysmonitor start                # monitor only
sudo sysmonitor start -o        # monitor and optimize
sysmonitor start -i 5 -o -t 70  # every 5s, optimize above 70% CPU

On startup SysMonitor measures a baseline for about five seconds, then starts drawing. Press Ctrl+C to stop. On Windows, run the terminal as Administrator when you use -o.

Commands and options

Usage: sysmonitor <command> [options]

Command What it does
start Starts monitoring. This is the default when no command is given.
--help, -h Prints usage.
--version, -v Prints the version and the platform it was built for.

Options for start:

Option Short Description Default
--optimize -o Enable auto-optimization. Off
--interval <seconds> -i Seconds between updates. 2
--threshold <percent> -t Per-process CPU % that triggers optimization. 80
--quiet -q Skip the startup banner and the live display. Off

A non-numeric value for -i or -t prints an error and exits with code 1.

Reading the display

Each refresh redraws four panels: a header, CPU usage, memory usage and the top processes. A fifth panel, optimization status, appears when -o is on.

Sample output
┌─ CPU USAGE ─────────────────────────────────────┐
│ Current: 28.50%  (↓ 45.20% improvement)
│ [██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 28.5%
└─────────────────────────────────────────────────┘
Color Load Meaning
Green Up to 60% Healthy.
Yellow Above 60% Moderate load.
Red Above 80% High load. Processes above the threshold are optimized when -o is on.

The improvement figure compares current CPU with the baseline measured at startup. An arrow down means CPU is below baseline. An arrow up means it is above.

Auto-optimization

When -o is set, each refresh checks the process list. Any process above the CPU threshold whose priority value is below 10 is moved to a lower priority. Nothing is killed, and no process is touched when -o is off.

Platform Change applied
Linux, macOS Nice value set to 10 with setpriority.
Windows Priority class set to Below Normal.

Each optimized process is logged with its name and PID to sysmonitor.log in the config directory. The author reports up to 45% lower mean CPU usage in the project README. Your result depends on your workload, so compare with and without -o.

Configuration

SysMonitor loads defaults from config.json at startup and saves them again when you quit. Command-line flags override the file for that run.

Platform Location
Linux, macOS ~/.config/sysmonitor/config.json
Windows %APPDATA%\SysMonitor\config.json

In version 2.0.1 the file holds one key and value per line, not JSON:

config.json
interval 2
optimize 0
threshold 80
history_length 120
color_scheme default
graph_type sparkline
auto_save 1
log_level info

The flags -i, -t and -o map to interval, threshold and optimize. Set auto_save to 0 to stop the file from being rewritten on exit.

Logging

Every run appends to sysmonitor.log in the config directory. Each line has a timestamp, a level and a message, and is flushed as soon as it is written. SysMonitor logs the start of the baseline measurement, each process it optimizes, and the moment monitoring stops.

sysmonitor.log
[2026-09-29 14:02:06] [INFO] Establishing baseline metrics...
[2026-09-29 14:02:13] [INFO] Optimized process: chrome (PID: 4312)
[2026-09-29 14:09:40] [INFO] Monitoring stopped

Follow it live with tail -f ~/.config/sysmonitor/sysmonitor.log on Linux and macOS, or Get-Content -Wait on Windows. Press Ctrl+C or send SIGTERM to stop cleanly. With auto_save on, your settings are then written to config.json, and a failed save is logged as a WARN line.

Permissions

  • Windows: run the terminal as Administrator, or priority changes fail.
  • Linux: run with sudo, or grant the capability once with sudo setcap cap_sys_nice=eip /usr/local/bin/sysmonitor.
  • macOS: run with sudo. If macOS still blocks it, add your terminal under Privacy and Security, Full Disk Access.

Monitoring alone needs no elevated rights.

Troubleshooting

Optimization does nothing

Start with elevated rights (see Permissions). The startup text should read Auto-optimization: ENABLED. Also check that a process actually exceeds the threshold, which is 80% CPU by default.

Command not found

Run the binary from the build folder with ./build/bin/sysmonitor start, or add its folder to your PATH.

Garbled output or missing colors

Use a terminal with ANSI color support: Windows Terminal, iTerm2 or GNOME Terminal. On Linux and macOS, set export TERM=xterm-256color.

CMake cannot find Visual Studio

Configure with MinGW instead: cmake .. -G "MinGW Makefiles".

Not in this build

The project README also lists stop, status, config, benchmark and export commands, the --daemon and --log options, and in-app keyboard shortcuts. The 2.0.1 source does not implement them yet, so this page leaves them out.

Contributing

Fork the repository, create a feature branch, make your change and open a pull request. Bugs and questions go to GitHub Issues.