yov*_*hen 7 memory-leaks python ram out-of-memory
我正在运行一些非常繁重的 python 程序。我已经运行这个脚本好几个星期了,但在过去的几天里,程序被以下消息杀死:
Killed
Run Code Online (Sandbox Code Playgroud)
我也尝试使用:
dmesg -T| grep -E -i -B100 'killed process'
Run Code Online (Sandbox Code Playgroud)
其中列出了错误:
[Sat Oct 17 02:08:41 2020] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/user@1000.service,task=python,pid=56849,uid=1000
[Sat Oct 17 02:08:41 2020] Out of memory: Killed process 56849 (python) total-vm:21719376kB, anon-rss:14311012kB, file-rss:0kB, shmem-rss:4kB, UID:1000 pgtables:40572kB oom_score_adj:0
Run Code Online (Sandbox Code Playgroud)
我有一台强大的机器,我尝试在运行时也没有运行其他任何东西(Pycharm 或终端),但它一直在发生。
眼镜:
跑步时 free -h t
total used free shared buff/cache available
Mem: 15Gi 2.4Gi 10Gi 313Mi 2.0Gi 12Gi
Swap: 8.0Gi 1.0Gi 7.0Gi
Run Code Online (Sandbox Code Playgroud)
恐怕这里没什么可做的。该进程正在被 OOM 杀手(Out Of Memory Killer)杀死,它是操作系统的一个进程,它的工作是在机器崩溃之前杀死占用过多内存的作业。这是一件好事。没有它,您的机器只会变得无响应。
因此,您需要弄清楚为什么您的 python 脚本占用了如此多的内存,并尝试使其使用更少的内存。
唯一的另一种选择是尝试获得更多的交换,当然,或者更多的 RAM,但这感觉就像一个创可贴。如果这是您的 Python 脚本,您应该尽可能地专注于减少内存占用。
小智 5
由于您运行程序的时间更长,因此缓冲区内存可能会增加。您可以使用下面的垃圾收集功能来清理缓冲区内存。另外,您可以在需要的地方添加 gc.collect() 。
import gc
gc.collect()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7461 次 |
| 最近记录: |