nvidia-smi 是唯一能直接、准确查看 NVIDIA 显存占用的命令,free 和 top 完全无效;因为它们仅统计 CPU 主内存(RAM),而 NVIDIA 显存(VRAM)由 GPU 驱动独立管理,不参与内核内存子系统,物理地址空间隔离,/proc/meminfo 中无任何 VRAM 字段。

nvidia-smi 是唯一能直接、准确查看 NVIDIA 显存占用的命令,free 和 top 完全无效。
为什么 free 和 top 看不到显存
Linux 的 free 和 top 只统计系统主内存(RAM),而 NVIDIA 显存(VRAM)由 GPU 驱动独立管理,不参与内核内存子系统。即使你看到 free -h 输出里有 “GPU” 字样,那也是误读或第三方补丁行为——标准内核不暴露 VRAM 给这些工具。
- 显存地址空间与 CPU 内存物理隔离,驱动通过 DMA 和 MMIO 控制
-
/proc/meminfo里没有任何 VRAM 相关字段 - 试图用
ps aux --sort=-%mem排序进程显存占用?结果全是 0 —— 因为进程显存使用不计入%mem
nvidia-smi 的正确用法和常见陷阱
nvidia-smi 默认每秒刷新,但输出格式对脚本极不友好:字段对齐靠空格,不是 CSV;值后带单位和空格;多卡时默认显示全部,容易越界。
- 查单卡实时显存:
nvidia-smi -i 0 --query-gpu=memory.used,memory.total --format=csv,noheader,nounits - 输出是类似
1234, 24576的纯数字(单位 MiB),可直接进 awk 或 Python - 如果报错
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,先运行lsmod | grep nvidia确认驱动已加载;若无输出,需sudo modprobe nvidia - 注意
GPU-Util和Memory-Usage是两个独立指标:前者是计算单元忙闲,后者才是显存真实占用,别混为一谈
非 NVIDIA 显卡怎么查显存
AMD、Intel 核显、国产 GPU(如景嘉微、风华、兆芯 C-960)无法用 nvidia-smi,必须换工具或路径。
- AMD(amdgpu 驱动):用
radeontop(动态监控)或读/sys/class/drm/card0/device/mem_info_vram_total(单位字节,需除以 1024² 得 MiB) - Intel 核显:
sudo intel_gpu_top(需装intel-gpu-tools),或看/sys/class/drm/card0/device/mem_info_vram_total(部分新驱动支持) - 景嘉微 JMGPU:若驱动安装后无
/sys/kernel/debug/jmgpu/,需手动修改 dkms 包中jmgpu_scroll.c补充设备 ID - 风华2号 / 兆芯 C-960:查
/sys/class/drm/card0/device/gpu-info或/sys/class/drm/card0/device/sysdbg.0/gpu_static_info,内容为文本键值对
glxinfo 和 mesa-utils 不适合查显存占用
glxinfo | grep Memory 常被推荐,但它只反映 OpenGL 上下文创建时的显存“可见总量”,且严重依赖开源驱动实现。在 NVIDIA 专有驱动下,它通常返回 0 或错误值;在 AMDGPU 下,它可能显示的是共享内存池而非独占 VRAM。
- 它不提供
used字段,无法监控实时占用 - 输出如
Video memory: 4096 MB是静态声明值,不是当前可用量 - 如果你看到
glxinfo返回libGL error: failed to load driver: swrast,说明 GL 上下文根本没起来,结果完全不可信
真正要写监控脚本或做资源调度,别碰 glxinfo 和 lspci —— 前者不反映使用量,后者只报型号。NVIDIA 就死磕 nvidia-smi 的 CSV 模式;其他厂商务必查对应 sysfs 路径或专用 CLI 工具,因为显存数据不在统一接口里,这是 Linux GPU 生态的硬伤。


















