如果我这样做
ulimit -v 200000
和运行
sort largefile
我可以从top
看到那种排序最多使用142232 Virt和92764 Res,但这种情况在一段时间后会减少甚至更多。
答案 0 :(得分:4)
如果您使用的是GNU sort
,答案是根据the rlimits for data (set by ulimit -d
) and RSS (set by ulimit -m
)计算默认值以及available memory和total 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%
)