![内存密集型进程在交换内存已满之前被终止](https://linux22.com/image/1029814/%E5%86%85%E5%AD%98%E5%AF%86%E9%9B%86%E5%9E%8B%E8%BF%9B%E7%A8%8B%E5%9C%A8%E4%BA%A4%E6%8D%A2%E5%86%85%E5%AD%98%E5%B7%B2%E6%BB%A1%E4%B9%8B%E5%89%8D%E8%A2%AB%E7%BB%88%E6%AD%A2.png)
我有一个非常运行内存密集型 Java 程序,刚开始它给出堆内存不足错误,所以我不断增加堆大小和交换分区(我只有 32 GB 的 RAM,但我远远超过了这个数字)。当我的堆大小大约为 300 GB 时,程序会一直运行,直到我使用了大约 170 GB,然后似乎被杀死了(终端会关闭,没有显示任何错误消息或崩溃消息,从 IDE 运行时也是如此,就像我从终端杀死它但我没有)。经过多次尝试,它成功运行,直到交换内存已满,然后它停止执行,并且 IDE 显示与内存不足相关的终止信号(完全正常,它不会突然关闭 IDE 而没有任何消息)。我将交换大小增加到 700 GB 并尝试运行两次,这也导致终端和 IDE 被杀死,交换内存甚至还不到一半满。我正在运行 Ubuntu 22.04 LTS,CPU 使用率很低(单个核心低于 50%,其他核心处于空闲状态),并且在运行期间我没有使用 PC 执行任何其他任务。运行时间不到 10 分钟。如能提供任何有关如何修复此问题的帮助,我将不胜感激。
更新:
似乎没有任何内存使用量或时间阈值,每次出现随机情况时进程都会被终止。
当进程被终止时,运行sudo dmesg -w
命令没有显示任何内容。同样,检查内核日志也/var/log/kern.log*
没有显示任何与正在发生的事情有关的内容。top
在进程运行时运行没有显示终止时值的峰值wa
。在进程被终止之前,我可以达到的最大运行时间是半小时左右,使用的交换内存为 500 GB,而在此之前的运行在几分钟内崩溃,当时使用的交换内存为 100 GB。