TechEarl

nvtop: Monitor NVIDIA, AMD, and Intel GPUs on Linux

nvtop is an htop-style GPU monitor for Linux. One install (sudo apt install nvtop), one command, and you get live per-GPU utilization, memory, temperature, and a sortable per-process list across NVIDIA, AMD, and Intel cards.

Ishan Karunaratne⏱️ 11 min readUpdated
Share thisCopied
nvtop gpu monitoring on Linux: an htop-style ncurses viewer for NVIDIA, AMD, and Intel GPUs showing live utilization, VRAM, temperature, and a sortable per-process list. Install, key bindings, and -d delay flag.

nvtop is an htop-style GPU monitor for Linux. Install it with your package manager and run it with no arguments:

bash
sudo apt install nvtop
nvtop

You get a full-screen ncurses view: a utilization and memory bar per GPU at the top, scrolling line plots in the middle, and a sortable list of the processes using the GPU at the bottom. It works across NVIDIA, AMD, and Intel cards from the same binary, which is the whole point. nvidia-smi covers NVIDIA only; nvtop reads NVIDIA via the proprietary driver, AMD via amdgpu, and Intel via i915/Xe, so one tool answers "what is on the GPU right now" regardless of vendor.

The thing to know up front: nvtop is read-mostly. It shows you live state and lets you sort and signal processes, but it does not change clocks, fan curves, or power limits. For "what is pinning my GPU and can I kill it", it is the fastest answer on Linux. For tuning, you still reach for the vendor tools.

Install nvtop

It is packaged on every mainstream distro, so you rarely build from source.

bash
# Debian / Ubuntu (20.04+)
sudo apt install nvtop

# Fedora (36+)
sudo dnf install nvtop

# Arch
sudo pacman -S nvtop

On older Ubuntu where the repo version lags, the maintainer's PPA has newer builds:

bash
sudo add-apt-repository ppa:quentiumyt/nvtop
sudo apt install nvtop

No NVIDIA-specific setup is needed beyond having the driver installed. nvtop links against the driver libraries it finds at runtime, so a box with both an AMD and an NVIDIA card shows both in one view.

Read the nvtop screen

Launch it bare:

bash
nvtop

The layout, top to bottom:

  • Device header per GPU: name, the utilization bar (GPU compute), the memory bar (VRAM used vs total), temperature, power draw, and fan speed where the driver exposes them. ENC and DEC percentage meters appear next to the utilization bar only while the video encoder or decoder is actually in use, and auto-hide after a period of inactivity.
  • Line plots in the middle: a rolling history of the chosen metric (utilization or memory) per GPU, so a spike is visible as a spike, not just a number that already moved.
  • Process list at the bottom: PID, user, the GPU it is on, the type (Graphics or Compute), GPU memory used by that process, and the command. This is the part you came for when a GPU is at 100% and you need to know what is holding it.

Memory sizes are reported in multiples of 1024 (1 KiB = 1024 bytes), matching how the drivers report VRAM, so the totals line up with nvidia-smi.

Sort the process list and signal a process

The process list is interactive. The keys that matter day to day:

KeyAction
Up / DownMove the highlight through the process list
Left / RightScroll a long command line horizontally
F6Choose the column to sort by (memory, GPU%, PID, …)
+Sort ascending
-Sort descending
F9Send a signal to the highlighted process (the "kill" menu)
F2Open the setup window
F12Save the current interface options to disk
F10, q, or EscQuit

The usual workflow when a GPU is saturated: press F6, pick GPU memory or utilization, press - to put the heaviest consumer at the top, highlight it, then F9 to send it a signal. F9 opens a signal picker rather than blindly sending SIGKILL, so you can send SIGTERM first and let the process clean up. That is friendlier than kill -9 <pid> against a training job mid-checkpoint.

Change the refresh rate

The default refresh is fine for eyeballing, but for catching short spikes or for a calmer display you set the delay explicitly. The flag is -d (or --delay), and the unit is tenths of a second, not seconds:

bash
nvtop -d 5    # refresh every 0.5s
nvtop -d 20   # refresh every 2s

So -d 10 is one update per second. The man page is explicit about it: "Delay between updates, in tenths of seconds (delay * 0.1s)." It trips people up because most monitors take the delay in whole seconds. A faster refresh (-d 2 for 0.2s) catches brief encode/decode bursts; a slower one (-d 50 for 5s) is easier to read on a shared dashboard.

A couple of other flags worth knowing:

bash
nvtop -C     # monochrome, for terminals with a broken palette
nvtop -p     # collapse to a single bar plot (max across all GPUs)
nvtop -f     # show temperature in Fahrenheit
nvtop -E -1  # keep the ENC/DEC meters always visible

-E sets the encode/decode auto-hide timer in seconds (default 30); pass a negative value to pin those meters on permanently. Settings you change live in the F2 setup window can be persisted with F12, which writes a config file under ~/.config/nvtop/ (XDG-respecting), reloaded on the next launch. Let F12 manage that file rather than hand-editing it.

nvtop vs nvidia-smi vs other monitors

nvtop is not the only GPU monitor, and it is not always the right one.

ToolVendorsLive TUIPer-processNotes
nvtopNVIDIA, AMD, Intel (also Apple, Qualcomm, Huawei, others)YesYesOne binary across vendors; read-mostly
nvidia-smiNVIDIA onlyNo (snapshot; -l loops)YesShips with the NVIDIA driver; also sets clocks/power
nvidia-smi dmonNVIDIA onlyScrolling textNoGood for logging to a file
radeontopAMD onlyYesNoAMD-specific, no process list
intel_gpu_topIntel onlyYesPartialPart of intel-gpu-tools
nvitopNVIDIA onlyYesYesRicher NVIDIA-only TUI, can also send signals

Reach for nvtop when you have mixed hardware, or you just want the htop reflex (run it, read it, kill the offender) without remembering vendor-specific commands. Reach for nvidia-smi when you are on pure NVIDIA and need to change something (set a power limit, lock clocks, query a specific field for a script) or want a one-shot snapshot you can pipe. The two are complementary, not competing; I keep nvtop open in a pane and use nvidia-smi for scripting and tuning.

Caveats and when not to use it

  • Some fields show N/A. That is the driver, not nvtop. Pre-Kepler NVIDIA hardware (NVML drops some queries on older cards), or an AMD card on an old kernel, expose fewer metrics than nvtop can display.
  • Driver coverage varies. On NVIDIA, nvtop loads libnvml.so from the proprietary driver, so the nouveau open-source stack is not supported; switch to the proprietary driver. On AMD, the legacy radeon driver works but exposes far fewer metrics than amdgpu, and the per-process list specifically needs the fdinfo interface that landed in kernel 5.14, so on older kernels the process view can come up empty even with amdgpu. Intel exposes the same fdinfo per-process interface only from kernel 5.19 (i915/Xe), so a pre-5.19 kernel shows Intel utilization but no process list.
  • It does not log. nvtop is an interactive viewer with no built-in CSV or time-series export. For monitoring over time, feed Prometheus with DCGM exporter (NVIDIA) or scrape nvidia-smi --query-gpu=... --format=csv -l, and use nvtop for the live look.
  • It does not tune. No clock, fan, or power control. That is nvidia-smi, nvidia-settings, or the AMD equivalents.
  • macOS and Windows. nvtop is Linux-first (it reads Linux driver interfaces). Apple Silicon support exists but is limited; on Windows there is no native build.

For watching CPU-side I/O and per-process system load alongside the GPU, I run iotop for disk I/O and pidstat for per-process CPU and memory in adjacent panes; together with nvtop that covers most "why is this box busy" questions without leaving the terminal.

See also

FAQ

nvtop is an interactive, ncurses-based GPU process viewer for Linux, in the same spirit as htop. It shows live per-GPU utilization, VRAM usage, temperature, and power draw at the top, rolling history plots in the middle, and a sortable list of the processes using the GPU at the bottom. It supports NVIDIA, AMD, and Intel cards from one binary.

Use your distribution's package manager. On Debian or Ubuntu (20.04 and newer) run sudo apt install nvtop; on Fedora 36+ run sudo dnf install nvtop; on Arch run sudo pacman -S nvtop. On older Ubuntu where the repo version is stale, the maintainer ships a PPA: sudo add-apt-repository ppa:quentiumyt/nvtop then sudo apt install nvtop. No extra setup is needed beyond having the GPU driver installed.

nvidia-smi is NVIDIA-only, ships with the driver, and can both query and change GPU state (power limits, clocks). nvtop is a live cross-vendor viewer that reads NVIDIA, AMD, and Intel GPUs but does not change anything beyond signaling a process. Use nvtop for the interactive "what is on the GPU and can I kill it" view, especially on mixed hardware; use nvidia-smi for snapshots, scripting, and tuning on pure-NVIDIA boxes.

Highlight the process with the Up and Down arrows, then press F9. nvtop opens a signal picker so you can choose SIGTERM (let it clean up) or SIGKILL (force) rather than blindly killing. To find the offender first, press F6 to choose the sort column (GPU memory or utilization) and - to sort descending so the heaviest consumer sits at the top.

Tenths of a second, not seconds. The refresh interval is the -d value times 0.1s, so nvtop -d 10 updates once per second, nvtop -d 5 twice per second, and nvtop -d 50 every five seconds. This catches people out because most monitors take a delay in whole seconds.

nvtop reads NVIDIA cards through libnvml.so from the proprietary driver, so the nouveau open-source stack is not supported; install the proprietary NVIDIA driver. On AMD, the legacy radeon driver does work but reports far fewer metrics than amdgpu, and the per-process list needs the kernel 5.14 fdinfo interface, so on an old kernel that list can be empty. If fields show N/A on a supported card, a newer kernel usually improves AMD coverage.

nvtop is a terminal app, so SSH into the box and run nvtop in the session. There is no separate agent or web UI. For a long-running job you want to keep an eye on, start it inside tmux or screen so the view survives a dropped connection: tmux new -s gpu, run nvtop, detach with Ctrl-b d, and re-attach later with tmux attach -t gpu. nvtop happily shows every GPU in the machine at once, so one session covers a multi-GPU node. If you need history rather than a live look, that is a metrics pipeline job (DCGM exporter into Prometheus), not nvtop.

Sources

Authoritative references this article was fact-checked against.

TagsnvtopGPUMonitoringLinuxNVIDIAAMDIntelCLI

Found this useful? Pass it on.

Copied

Ishan Karunaratne

Software Systems Architect · Senior Software Engineer · Engineering Leadership

Software systems architect and senior software engineer with more than two decades designing, building, and running production software, Linux systems, and DevOps infrastructure, and lately working AI into the stack. Now a CTO, though what I write here is drawn from the full arc of that work, across architecture, engineering, and operations, not any single job.

Keep reading

Related posts