Linux

並行:超過記憶體限制門檻值時暫停(換出)長時間執行的進度

  • January 21, 2021

假設我有 10 GB 的 RAM 和無限交換。

我想並行執行 10 個作業(gnu 並行是一種選擇,但不一定是唯一的)。這些作業逐漸需要越來越多的記憶體,但它們開始時很小。這些是 CPU 消耗量很大的作業,每個都執行在 1 個核心上。

例如,假設每個作業執行 10 小時,開始時需要 500MB 記憶體,完成後需要 2GB,記憶體呈線性增長。因此,如果我們假設它們呈線性增長,那麼在 6 小時 40 分鐘時,這些作業將超過 10GB 的可用記憶體。

我如何管理這些作業,以便它們始終在 RAM 中執行,暫停其中一些作業的執行,同時讓其他作業執行?

GNU 並行可以做到這一點嗎?

自六月以來,情況發生了變化。

Git 版本 e81a0eba 現在有--memsuspend

--memsuspend size (alpha testing)

Suspend jobs when there is less than 2 * size memory free. The size can be
postfixed with K, M, G, T, P, k, m, g, t, or p which would multiply the size
with 1024, 1048576, 1073741824, 1099511627776, 1125899906842624, 1000,
1000000, 1000000000, 1000000000000, or 1000000000000000, respectively.

If the available memory falls below 2 * size, GNU parallel will suspend some
of the running jobs. If the available memory falls below size, only one job
will be running.

If a single job takes up at most size RAM, all jobs will complete without
running out of memory. If you have swap available, you can usually lower
size to around half the size of a single jobs - with the slight risk of
swapping a little.

Jobs will be resumed when more RAM is available - typically when the oldest
job completes.

引用自:https://unix.stackexchange.com/questions/594565