python - 由于可能未关闭的内核导致的内存泄漏
问题描述
我被迫在我自己不托管的 Linux 服务器上使用 JupyterLab。问题是 Jupyter 进程占用大量内存;这已经出现在几个错误报告中,比如这里和这里。
无论如何,正如从介绍中所预料的那样,我没有任何 sudo 权限,因此无法自己重新启动实验室(至少我认为这对我来说是不可能的)。
从 HTOP 截取的截图中可以看出我认为有什么奇怪的地方:
启动实验室的 bash 命令有很多子进程,它们看起来都像我在整个使用时间内打开和关闭的内核(服务器运行了一个月,我打开和关闭了很多内核;服用时没有一个运行图片)。
由于这些过程中的每一个都结束于.json
,我假设这些可能是一些仍然完整的运行时参数。第三层的所有进程看起来都和截图一样,没有别的。
无论如何,我不想解决内存溢出错误。我的问题相当直截了当:
由于没有内核在运行:我可以杀死第三级的所有进程并通过这样做释放内存,或者这可能会使实验室崩溃?
不要让实验室崩溃是必不可少的,因为我无法重新启动实验室。
解决方案
幸运的是,我在这里偶然发现了这个网站。在这里,作者遇到了一个与未发布的 GPU 内存相关的问题,还有很多ipykernel_launchers
.
他通过使用建议的激烈方式解决了这个问题。
- 首先,显示您
ipykernel_launchers
的所有ps -aux|grep ipykernel_launcher
内容(类似于问题中的 HTOP 屏幕截图)。 - 用 .一个一个地杀死每个进程
kill -9 PID1 PID2 ...
。确保只以(仅此而已)的方式杀死所有内容:/usr/bin/python3 -m ipykernel_launcher -f /content/.local/share/jupyter/runtime/kernel-95cb65b9-23eb-4f87-801b-d995ca30fc32.json
- 现在应该释放内存并且 JupyterLab 应该仍在运行。
编辑:
感谢Unix&Linux-StackExchange 上的@EightBitTony,我现在知道有一个命令可以一步杀死所有进程:
for pid in $(ps -ef | grep -v "awk" | awk '/ipykernel_launcher/ {print $2}'); do kill -9 $pid; done
当你这样做时,请注意你在做什么!
推荐阅读
- java - Maven 复制依赖项 + 阴影 - 类路径管理
- node.js - Cloudwatch 错误计数不会随着 catch 块中捕获的错误而增加
- scheme - call/cc 如何与“Lisp in Small Pieces”中的 CPS 转换一起工作?
- ruby-on-rails - 我需要在我的关注请求页面中为拒绝选项添加销毁功能
- node.js - 如何使用 ARI 获取 SIP 用户状态?
- php - Yii2 - RBAC 规则允许/查看自己的数据
- java - 如何在java中获取字节数组列表对象的总和
- asp.net-mvc - 如何在 ASP.net MVC web api 中使请求超时
- pandas - 如何根据熊猫中的每个年龄数字创建年龄组?
- jenkins-pipeline - 使用 Jenkins 管道构建现有工作在“调度项目”中挂起