docker容器中程序退出异常,GPU未释放

在Docker容器中,一个长时间运行的GPU数据清洗任务完成之后,进程未正常退出,导致GPU内存未释放。尝试通过kill和kill-9命令都无法终止相关进程,其中一些进程的PPID为1,即init进程。由于进程可能处于僵尸状态或核心态,常规方法无法终止。最终,通过重启服务器解决了问题。
摘要由CSDN通过智能技术生成

1、问题描述

近期在docker容器中对一批数据通过算法进行清洗时,当数据处理完成后发现进程未正常退出,GPU内存未正常释放。

[root@ai66 ~]# nvidia-smi
Sun Sep 26 09:10:45 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.38       Driver Version: 455.38       CUDA Version: 11.1     |
|-------------------------------+----------------------+----------------------+
| 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  GeForce GTX 108...  Off  | 00000000:04:00.0 Off |                  N/A |
|  0%   56C    P2   101W / 250W |  10066MiB / 11178MiB |     12%      Default |
|                               |                      |                  N/A |
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2209      C   python3                           967MiB |
|    0   N/A  N/A      7747      C   -                                 905MiB |
|    0   N/A  N/A      9055      C   -                                 889MiB |
|    0   N/A  N/A     11877      C   python3                           967MiB |
|    0   N/A  N/A     18297      C   -                                1530MiB |
|    0   N/A  N/A     24028      C   -                                1013MiB |
|    0   N/A  N/A     24601      C   -                                1530MiB |
|    0   N/A  N/A     25329      C   -                                 967MiB |
|    0   N/A  N/A     26568      C   -                                 333MiB |
|    0   N/A  N/A     37182      C   -                                 961MiB |

2、分析原因

因为处理的数据量较大,程序通常执行时间几乎20h+,执行完成后未正常退出,原因暂未知。

3、解决过程

通过kill杀死进程失败

尝试通过kill -9 PID强制杀死进程,无效,进程仍存在。

[root@ai66 ~]# kill -9 7747
[root@ai66 ~]# nvidia-smi
Sun Sep 26 09:53:18 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.38       Driver Version: 455.38       CUDA Version: 11.1     |
|-------------------------------+----------------------+----------------------+
| 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  GeForce GTX 108...  Off  | 00000000:04:00.0 Off |                  N/A |
|  0%   56C    P2    92W / 250W |  10066MiB / 11178MiB |      0%      Default |
|                               |                      |                  N/A |

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2209      C   python3                           967MiB |
|    0   N/A  N/A      7747      C   -                                 905MiB |
|    0   N/A  N/A      9055      C   -                                 889MiB |
|    0   N/A  N/A     11877      C   python3                           967MiB |
|    0   N/A  N/A     18297      C   -                                1530MiB |
|    0   N/A  N/A     24028      C   -                                1013MiB |
|    0   N/A  N/A     24601      C   -                                1530MiB |
|    0   N/A  N/A     25329      C   -                                 967MiB |
|    0   N/A  N/A     26568      C   -                                 333MiB |
|    0   N/A  N/A     37182      C   -                                 961MiB |
尝试kill掉其父进程,

也失败。我们发现该进程的PPID是1,即init进程,该进程我们是无法kill掉的。

[root@ai66 ~]# ps -ef |grep 7747
root      4020 10169  0 09:56 pts/0    00:00:00 grep --color=auto 7747
root      7747     1 25 Sep25 ?        04:41:57 [python3.8]

如果一个defunct进程的PPID为1,则该defunct进程的父进程为init进程。init进程是系统中所有进程的起源。通常情况下,init进程通过将defunct进程的PPID设为1来收回该进程。

为何无法kill掉某些进程

查找资料分析其原因如下:

kill -9发送SIGKILL信号将其终止,但是以下两种情况不起作用
a、该进程处于"Zombie"状态(使用ps命令返回defunct的进程)。此时进程已经释放所有资源,但还未得到其父进程的确认。"Zombie"进程要等到下次重启时才会消失,但它的存在不会影响系统性能。

[root@ai66 ~]# ps -ef |grep 9055
root      9055 38368 94 Sep24 ?        1-20:27:40 [python3] <defunct>
root     18500 10169  0 09:25 pts/0    00:00:00 grep --color=auto 9055

b、 该进程处于"kernel
mode"(核心态)且在等待不可获得的资源。处于核心态的进程忽略所有信号处理,因此对于这些一直处于核心态的进程只能通过重启系统实现。进程在AIX中会处于两种状态,即用户态和核心态。只有处于用户态的进程才可以用“kill”命令将其终止

[root@ai66 ~]# ps -ef |grep 7747
root      7747     1 26 Sep25 ?        04:41:57 [python3.8]
root     16993 10169  0 09:25 pts/0    00:00:00 grep --color=auto 7747
问题解决

此时,docker stop 想要退出容器或者 docker exec重新进入容器,都会有异常报错。至此没办法,我们只能重启服务器了。
果然,一键reboot,gpu显卡恢复如初。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值