如果我执行
ulimit -v 200000
然后运行
sort largefile
我可以从top
中看到,sort使用的最多是142232个Virt和92764个Res,但是经过一段时间后,这个值会进一步降低。
- sort如何知道设置的ulimit限制是多少?
- 为什么它不会使用我给它的全部 200MB?
注:ulimit 是一个能够控制 shell 进程在工作时所能占用的系统资源数量的命令。其中-v 参数用于限制进程虚拟内存的大小。Sort 是一个 Unix 命令,用于对文本文件进行排序操作。top 命令用于实时监控系统中各个进程的资源占用情况。
sort
命令时,如果没有使用-S
选项,则会选择默认大小,该大小在某种程度上受ulimit
的影响(RLIMIT_DATA
由ulimit -d
设置,RLIMIT_RSS
由ulimit -m
设置),但也受其他无法控制的变量的影响。使用sort -S
可以消除歧义,确切地指定要使用的大小。 - Stuart Caieulimit -v
限制:echo -n "VM limit = "; ulimit -v; yes | head -100000000 | sort -S 2000M | wc
。这将告诉sort
它可以使用2000 MB的排序缓冲区。如果没有虚拟内存限制,它将能够使用该缓冲区,并正常工作。如果有虚拟内存限制,即使已经被指示使用2000 MB,它也将无法使用,进程将崩溃,例如sort: memory exhausted
。 - Stuart Caie