Linux 排序如何计算出内存的数量?
如果我这样做Linux 排序如何计算出内存的数量?,linux,sorting,memory,Linux,Sorting,Memory,如果我这样做 ulimit-v 200000 跑步呢 对大文件进行排序 我可以从top中看到,排序最多使用142232 Virt和92764 Res,但过一段时间后,这一数字会下降更多 sort如何知道ulimit限制设置为什么 为什么它不使用我给它的所有200MB 如果您使用的是GNUsort,答案是它会根据和的sysconf值以及计算默认值 无论您的ulimit如何,默认内存大小都不会超过当前可用内存的3/4或总内存的1/8,以较大者为准 /* Let MEM be available me
ulimit-v 200000
跑步呢
对大文件进行排序
我可以从top
中看到,排序最多使用142232 Virt和92764 Res,但过一段时间后,这一数字会下降更多
如果您使用的是GNU
sort
,答案是它会根据和的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;
该值可以是千字节数,也可以是另一个单位的后缀(例如
-s100m
),也可以是总内存的百分比(例如-s55%
)这是一个很好的答案。非常感谢。ulimit-v200000限制了虚拟内存,但sort-s200000限制了一些不同的东西。是吗?sort
不带-S
选项选择默认大小,它在某种程度上受ulimit
的影响(RLIMIT\u数据由ulimit-d设置,RLIMIT\u RSS由ulimit-m
设置),但也受其他无法控制的变量的影响sort-S
可以让你消除歧义,准确说出你想用多少。是的,对不起,我是说别的。我可以看到排序-S 200000将Res限制在200MB,但没有Virt(从顶部看)。但是ulimit-v 200000限制了Virt,对吗?这就转到了一个稍微不同的话题。虚拟内存限制最终控制数据和RSS限制的大小,因为虚拟内存大小是“最终限制”。虚拟内存通常是不受限制的,因为它用于一切,而不仅仅是数据共享库、可执行文件,以及用户关心的东西,如私有数据和内存中的部分(RSS)。有关更多讨论,请参阅!例如,尝试在有或没有ulimit-v
limit集的情况下运行此命令:echo-n“VM limit=”;ulimit-v;是|水头-100000000 |排序-S 2000M | wc
。这将告诉sort
允许使用2000 MB作为其排序缓冲区。如果没有虚拟机限制,它将能够使用该缓冲区,并且可以正常工作。如果存在VM限制,即使已指示它使用2000 MB,也不允许使用,并且进程将崩溃,例如,sort:memory expensed
-S, --buffer-size=SIZE
use SIZE for main memory buffer