![“致命错误:无法分配足够的内存”但有大量未使用的交换区](https://linux22.com/image/230624/%E2%80%9C%E8%87%B4%E5%91%BD%E9%94%99%E8%AF%AF%EF%BC%9A%E6%97%A0%E6%B3%95%E5%88%86%E9%85%8D%E8%B6%B3%E5%A4%9F%E7%9A%84%E5%86%85%E5%AD%98%E2%80%9D%E4%BD%86%E6%9C%89%E5%A4%A7%E9%87%8F%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E4%BA%A4%E6%8D%A2%E5%8C%BA.png)
我正在尝试跑步螃蟹(特别是“成对全局对齐”小节,它调用虚拟搜索)在 128GB RAM 工作站上,操作系统=Ubuntu 23.04,内核=6.2.0-39generic。
我在运行分析时没有问题,同时减少了用作参考的序列的最大长度,但我想使用完整的参考数据库。
当我使用完整数据集启动脚本时,分析大约 30% 时失败,并显示以下消息:
Fatal error: Unable to allocate enough memory
。
然而该系统有:
128GB内存
776 GB 交换空间
交换区组织在一个分区 + 2 个交换文件中(全部位于 NVME SSD 上)。
NAME TYPE SIZE USED PRIO
/swap.img file 8G 339,4M -2
/dev/nvme0n1p3 partition 256G 1G -3
/home/swapfile file 512G 0B -4
Swappiness 设置为 60:
cat /proc/sys/vm/swappiness
60
并且系统在需要时正确交换。
在分析进行到大约 30% 时,分配了大约 100% 的 RAM 和大约 300GB 的交换区,分析停止并出现上述错误。但是,系统应该还有超过 400GB 的可用交换空间。
我已经检查过 CommitLimit(等于可用内存总量)和大约发生故障时的 Commied_AS,但最后一个约为 300GB(如图所示)顶部, 也)。
我还设置了:
echo 100 > /proc/sys/vm/overcommit_ratio
并且还尝试过:
systemctl disable --now systemd-oomd
systemctl mask system-oomd
有人知道是否有任何其他系统参数/选项可能会限制可用交换大小?
非常感谢您的帮助。