ele*_*ora 2 linux memory sorting
如果我做
ulimit -v 200000
和运行
sort largefile
我可以从top
这种情况中看到最多使用 142232 Virt 和 92764 Res,但一段时间后会减少更多。
如果您使用的是 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%
)