文章目录
- 一、问题描述
- 二、解决方案
-
- [2.1 寻找问题进程](#2.1 寻找问题进程)
- [2.2 尝试杀死相关进程](#2.2 尝试杀死相关进程)
- [2.3 投放核弹,一键全杀](#2.3 投放核弹,一键全杀)
- [2.4 再次查看GPU使用情况](#2.4 再次查看GPU使用情况)
- 参考资料
一、问题描述
今天使用服务器的时候发现gpu被占了很多内存,但是使用 nvidia-smi
命令并没有发现占这么多显存的进程,如下图所示:
二、解决方案
2.1 寻找问题进程
使用命令 sudo fuser -v /dev/nvidia*
查看。该命令将GPU设备作为文件,查看最近打开该设备文件的进程号。
在我的服务器上的输出如下所示,为便于阅读,这里我只保留部分输出。
我们可以看到主要使用gpu的进程为lmx用户的进程。
shell
用户 进程号 权限 命令
/dev/nvidia0: ollama 1242 F...m ollama
gdm 2925 F...m Xorg
gdm 3053 F...m gnome-shell
wrz 3677 F...m Xorg
wrz 3882 F...m gnome-shell
wrz 4266 F...m gnome-initial-s
lmx 322164 F...m pt_data_worker
lmx 322188 F...m pt_data_worker
lmx 322212 F...m pt_data_worker
lmx 322265 F...m pt_data_worker
"此处省略部分输出"
lmx 1833948 F.... pt_data_worker
lmx 1833975 F.... pt_data_worker
lmx 1834017 F.... pt_data_worker
lmx 1834060 F.... pt_data_worker
lmx 1834095 F.... pt_data_worker
/dev/nvidia1: ollama 1242 F...m ollama
gdm 2925 F...m Xorg
gdm 3053 F...m gnome-shell
wrz 3677 F...m Xorg
wrz 3882 F...m gnome-shell
wrz 4266 F...m gnome-initial-s
lmx 322164 F...m pt_data_worker
lmx 322188 F...m pt_data_worker
lmx 322212 F...m pt_data_worker
"此处省略部分输出"
lmx 1833975 F...m pt_data_worker
lmx 1834017 F...m pt_data_worker
lmx 1834060 F...m pt_data_worker
lmx 1834095 F...m pt_data_worker
/dev/nvidiactl: ollama 1242 F.... ollama
gdm 2925 F...m Xorg
gdm 3053 F...m gnome-shell
wrz 3677 F...m Xorg
wrz 3882 F...m gnome-shell
wrz 4266 F...m gnome-initial-s
lmx 322164 F...m pt_data_worker
lmx 322188 F...m pt_data_worker
lmx 322212 F...m pt_data_worker
lmx 322265 F...m pt_data_worker
"此处省略部分输出"
lmx 1833975 F...m pt_data_worker
lmx 1834017 F...m pt_data_worker
lmx 1834060 F...m pt_data_worker
lmx 1834095 F...m pt_data_worker
/dev/nvidia-modeset: "此处省略部分输出"
/dev/nvidia-uvm: "此处省略部分输出"
2.2 尝试杀死相关进程
我首先根据 参考资料[2] 中所述一键解决的方法尝试杀死相关进程,但该方法对我无效,使用命令:
shell
sudo fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sh
控制台的输出如下(这里我也只保留了部分输出),我们可以看到操作不被允许,并且进程号只到了120就结束了。(不过看那篇博客,这个方法应该是有用的,你们也可以试试)
shell
"此处省略部分输出"
sh: 1: kill: Operation not permitted
sh: 2: kill: Operation not permitted
sh: 3: kill: Operation not permitted
sh: 4: kill: Operation not permitted
sh: 5: kill: Operation not permitted
sh: 6: kill: Operation not permitted
"此处省略部分输出"
sh: 116: kill: Operation not permitted
sh: 117: kill: Operation not permitted
sh: 118: kill: Operation not permitted
sh: 119: kill: Operation not permitted
sh: 120: kill: Operation not permitted
2.3 投放核弹,一键全杀
最后我决定杀死lmx用户下的所有进程,使用命令:
shell
sudo kill $(ps -u lmx -o pid= | xargs)
成功解决问题!
2.4 再次查看GPU使用情况
可以看到GPU显存以恢复正常,并且lmx用户下的进程已经全部消失。
shell
Thu Feb 20 16:04:22 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.58.02 Driver Version: 555.58.02 CUDA Version: 12.5 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3090 Off | 00000000:01:00.0 Off | N/A |
| 50% 45C P8 15W / 350W | 416MiB / 24576MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 3090 Off | 00000000:05:00.0 Off | N/A |
| 50% 36C P8 8W / 350W | 36MiB / 24576MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 2086 G /usr/lib/xorg/Xorg 35MiB |
| 0 N/A N/A 2925 G /usr/lib/xorg/Xorg 55MiB |
| 0 N/A N/A 3053 G /usr/bin/gnome-shell 14MiB |
| 0 N/A N/A 3677 G /usr/lib/xorg/Xorg 35MiB |
| 0 N/A N/A 4266 G /usr/libexec/gnome-initial-setup 4MiB |
| 1 N/A N/A 2086 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 2925 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 3677 G /usr/lib/xorg/Xorg 4MiB |
+-----------------------------------------------------------------------------------------+
shell
用户 进程号 权限 命令
/dev/nvidia0: ollama 1242 F...m ollama
gdm 2925 F...m Xorg
gdm 3053 F...m gnome-shell
wrz 3677 F...m Xorg
wrz 3882 F...m gnome-shell
wrz 4266 F...m gnome-initial-s
/dev/nvidia1: ollama 1242 F...m ollama
gdm 2925 F...m Xorg
gdm 3053 F...m gnome-shell
wrz 3677 F...m Xorg
wrz 3882 F...m gnome-shell
wrz 4266 F...m gnome-initial-s
/dev/nvidiactl: ollama 1242 F.... ollama
gdm 2925 F...m Xorg
gdm 3053 F...m gnome-shell
wrz 3677 F...m Xorg
wrz 3882 F...m gnome-shell
wrz 4266 F...m gnome-initial-s
/dev/nvidia-modeset: gdm 2925 F.... Xorg
gdm 3053 F.... gnome-shell
wrz 3677 F.... Xorg
wrz 3882 F.... gnome-shell
wrz 4266 F.... gnome-initial-s
/dev/nvidia-uvm: ollama 1242 F.... ollama
参考资料
[1] 记一次捉鬼:显存被占用但是nvidia-smi里看不到进程
[2] 解决gpu没有运行进程,但是显存一直占用的方式