sort 如何计算有多少 RAM?

ele*_*ora 2 linux memory sorting

如果我做

ulimit -v 200000

和运行

sort largefile

我可以从top这种情况中看到最多使用 142232 Virt 和 92764 Res,但一段时间后会减少更多。

  1. sort 如何知道 ulimit 限制设置为什么?
  2. 为什么它不使用我给它的所有 200MB?

Stu*_*aie 6

如果您使用的是 GNU sort,答案是它根据数据的 rlimits(由 设置ulimit -d)和 RSS(由 设置ulimit -m以及可用内存总内存的 sysconf 值来计算默认值。

无论您的 ulimit 是多少,默认内存大小都不会超过当前可用内存的 3/4 或总内存的 1/8,以较大者为准。

/* Let MEM be available memory or 1/8 of total memory, whichever
   is greater.  */
double avail = physmem_available ();
double total = physmem_total ();
double mem = MAX (avail, total / 8);

/* Leave a 1/4 margin for physical memory.  */
if (total * 0.75 < size)
 size = total * 0.75;
Run Code Online (Sandbox Code Playgroud)

使用 GNU sort,您可以使用-S选项来指定排序缓冲区大小:

   -S, --buffer-size=SIZE
          use SIZE for main memory buffer
Run Code Online (Sandbox Code Playgroud)

该值可以是千字节数,可以是另一个单位的后缀(例如-S 100M),也可以是总内存的百分比(例如-S 55%