排序如何计算出有多少RAM?

时间:2014-05-16 14:03:54

标签: linux sorting memory

如果我这样做

ulimit -v 200000

和运行

sort largefile

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

  1. 排序如何知道ulimit限制设置为什么?
  2. 为什么不使用我提供的所有200MB?

1 个答案:

答案 0 :(得分:4)

如果您使用的是GNU sort,答案是根据the rlimits for data (set by ulimit -d) and RSS (set by ulimit -m)计算默认值以及available memorytotal memory的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;

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

   -S, --buffer-size=SIZE
          use SIZE for main memory buffer

此值可以是数字千字节,可以使用其他单位后缀(例如-S 100M),也可以是总内存的百分比(例如-S 55%