Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 排序如何计算出内存的数量?_Linux_Sorting_Memory - Fatal编程技术网

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,但过一段时间后,这一数字会下降更多

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

  • 如果您使用的是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