在服务器上发现 nvitop 显示某张 GPU 显存被占用,但进程一栏是:
No Such Process直接执行:
kill -9 <PID>又提示:
No such process这种情况一般是进程异常退出、子进程或僵尸进程没有正确释放 GPU 资源导致的。
1. 用 sudo 查看真实占用进程
普通用户可能看不全其他用户的 GPU 进程,所以要用 sudo:
sudo fuser -v /dev/nvidia*如果只看某张卡,比如 GPU 1:
sudo fuser -v /dev/nvidia1输出中可以看到占用该 GPU 的用户和 PID,例如:
USER PID COMMAND
xxx 12345 python2. 切换到对应用户
找到占用显存的用户后,切换到该用户:
sudo su - <username>例如:
sudo su - xxx3. 清理该 GPU 上的进程
在对应用户下执行:
fuser -v /dev/nvidia1确认是这个用户的进程后,可以清理:
fuser -v /dev/nvidia1 | xargs -t -n 1 kill -9注意:这条命令会杀掉 /dev/nvidia1 上查到的进程,慎用。多人服务器上一定要先确认不要误杀别人的任务。
4. 再检查 GPU 是否释放
退出用户:
exit然后查看:
nvidia-smi或者:
nvitop如果显存释放了,说明处理成功。
总结
我的处理流程是:
sudo fuser -v /dev/nvidia*
sudo su - <占用显存的用户>
fuser -v /dev/nvidia1
fuser -v /dev/nvidia1 | xargs -t -n 1 kill -9
nvidia-smi核心点:
fuser查 GPU 占用时最好用sudo;- 普通用户可能看不到完整 GPU 进程;
- 找到对应用户后,切换到该用户再 kill;
No Such Process不能直接 kill 原来的 PID,要通过/dev/nvidiaX找真实占用进程;- 清理整张卡进程前要确认不会影响其他人的任务。