由于可能未关闭的内核而导致的内存泄漏

Memory leakage due to presumably unclosed kernels

我被迫在 Linux-服务器上使用 JupyterLab,我自己不托管。 问题是 Jupyter 进程占用大量内存;这已经出现在几个错误报告中,例如 here and here.

总之,正如介绍中所预料的那样,我没有任何 sudo 权限,因此无法自行重启实验室(至少我认为这对我来说不应该是可能的)。

在我看来奇怪的地方可以从 HTOP 的截图中看出:

启动实验室的 bash 命令有很多子进程,它们看起来都像我在整个使用时间内打开和关闭的内核(服务器运行了一个月,我打开并关闭了一个很多内核;拍照时 none 是 运行。

由于这些进程中的每一个都在 .json 结束,我假设这些可能是一些仍然完好无损的运行时参数。第三层的所有进程看起来都与屏幕截图中的一样,没有其他任何东西。

无论如何,我不想解决内存溢出问题。我的问题很直接:

因为没有内核 运行: 我可以杀死第三层的所有进程并通过这样做释放内存吗,或者这可能会导致崩溃lab?
不让实验室崩溃是必不可少的,因为我不可能重新启动实验室。

幸运的是,我偶然发现了这个网站 here。 这里作者有一个与未发布 GPU-memory 和很多 ipykernel_launchers.

相关的问题

他使用建议的激进方法解决了这个问题。

  1. 首先,用ps -aux|grep ipykernel_launcher显示你所有的ipykernel_launchers(类似于问题中的HTOP-screenshot)。
  2. 使用 kill -9 PID1 PID2 ... 一个一个地杀死每个进程。请务必 以(仅此而已)的方式杀死所有内容:

    /usr/bin/python3 -m ipykernel_launcher -f /content/.local/share/jupyter/runtime/kernel-95cb65b9-23eb-4f87-801b-d995ca30fc32.json

  3. 现在应该释放内存,JupyterLab 应该仍然 运行。

编辑:

感谢@EightBitTony on Unix&Linux-StackExchange 我现在知道有一个命令可以一步杀死所有进程:

for pid in $(ps -ef | grep -v "awk" | awk '/ipykernel_launcher/ {print }'); do kill -9 $pid; done

请注意这样做的后果!

实际上有一种内置的方法可以在给定特定模式的情况下终止进程:

pkill -f /<regex-pattern>/

在你的情况下,pkill -f ".*/ipykernel_launcher/.*" 可以解决问题