nvidia-smi 是唯一能直接、准确查看 NVIDIA 显存占用的命令,free、top、ps、htop 等均无效,因其仅统计 CPU 主内存;显存由 GPU 驱动独立管理,内核无感知,需用 nvidia-smi 定制参数解析。

nvidia-smi 是唯一能直接、准确查看 NVIDIA 显存占用的命令,free 和 top 完全无效——它们只统计 CPU 主内存(RAM),而显存(VRAM)由 GPU 驱动独立管理,物理地址空间隔离,/proc/meminfo 里压根没有 VRAM 字段。
为什么 ps aux --sort=-%mem 看不到显存?
因为进程的显存使用不计入 %mem 或 RSS:这些指标只反映内核可见的物理内存(RAM)占用。GPU 显存分配走的是驱动私有接口(如 CUDA 的 cudaMalloc),内核无感知,ps、top、pmap 全部无法捕获。
- 你看到的
RSS值哪怕高达几 GB,也只是该进程在 CPU 内存中映射的控制结构或 pinned memory,不是显存本身 -
sudo lsof -p可能显示设备文件(如| grep nvidia /dev/nvidiactl),但这只是句柄,不体现用量 - 误以为
htop的 MEM% 列含 GPU 内存?它底层仍调用/proc/[pid]/statm,和ps一样无显存字段
nvidia-smi 的正确用法和脚本友好写法
默认输出字段对齐靠空格、带单位、多卡时列宽不固定,不适合解析。要用于监控或告警,必须加参数定制:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 查单卡当前显存用量(单位 MiB,纯数字):
nvidia-smi -i 0 --query-gpu=memory.used,memory.total --format=csv,noheader,nounits - 查所有卡 ID 和显存总量:
nvidia-smi --query-gpu=index,name,uuid,memory.total --format=csv,noheader - 每 2 秒刷新一次显存占用(不带标题,适合
watch):nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits -l 2 - 如果报错
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,先运行lsmod | grep nvidia;若无输出,需sudo modprobe nvidia
非 NVIDIA 显卡怎么查?
AMD、Intel 核显、国产 GPU(如景嘉微、风华)不能用 nvidia-smi,必须换路径:
- AMD(
amdgpu驱动):cat /sys/class/drm/card0/device/mem_info_vram_total(字节单位,除以1024*1024得 MiB);动态监控用radeontop - Intel 核显:
sudo intel_gpu_top(需装intel-gpu-tools);部分新驱动也支持读/sys/class/drm/card0/device/mem_info_vram_total - 注意:
card0可能是card1,用ls /sys/class/drm/ | grep card确认
最易被忽略的一点:GPU-Util(计算单元利用率)和 Memory-Usage(显存占用)是两个完全独立指标——高 GPU-Util 不代表显存快满了,显存占满也可能 GPU-Util 为 0。查显存,只盯 memory.used 字段,别被其他列带偏。










