如何增加 ConTeXt 中的节点内存大小?

如何增加 ConTeXt 中的节点内存大小?

对于一个非常大的文档,使用 编译大约 30 分钟后context,我收到此错误:

! TeX capacity exceeded, sorry [node memory size=100987760].

texmf.cnf我添加了一行node_memory_size=1000000000,将内存大小增加 10 倍,然后运行sudo fmtutil-sys --all,但仍然出现错误。

  • 我需要改变什么值才能使该文档编译?

答案1

luatex 中的节点内存在需要时会自动重新分配,因此您已经耗尽了内存,或者(更可能)达到了操作系统愿意分配给单个进程的内存量限制。

通常,这意味着宏编程错误,这不是 luatex 本身的错误。如果您使用\tracingall添加运行输入文件,您可能会看到(大量)重复输出,表明某处存在错误递归。没有您的输入就无法确定,但这种诊断是相当安全的选择。

那么为什么会有下限呢?您看到的数字不是以字节为单位,而是以内存字为单位,通常为 8 个字节。重新分配使用 realloc(),这意味着新值和旧值同时处于活动状态。您看到的是旧数字,因此新数字将接近 2Gb ((1+1.25) * 8 * 100987760)。加上正在使用的剩余 luatex 内存,只有 2GB 的实际内存,您就不必再对致命错误感到惊讶了。

答案2

摘自 LuaTeX 手册,第 187 页

传统 TeX 用于存储 token 和节点的单个内部内存堆被分成两个独立的数组。每个数组都会在需要时动态增长。

与主内存相关的 texmf.cnf 设置不再使用(这些是:main_memorymem_bot和)。“主内存不足”错误仍然可能发生,但限制因素现在是系统extra_mem_topextra_mem_bot的 RAM 数量,而不是预定义的限制。

相关内容