为什么ulimit无法成功限制常驻记忆,以及如何?

我启动一个新的bash shell,并执行:

ulimit -m 102400 ulimit -a " core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) 102400 open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited " 

然后,我执行编译一个巨大的项目。 它的链接将使用大内存,超过2G。 结果,进程ld使用了超过2G的常驻内存。

有什么不对吗? 如何使用ulimit或可以使用其他程序来限制常驻内存?

限制驻留内存的目标,是因为一个进程几乎使用了所有的内存时,计算机会冻结。

Solutions Collecting From Web of "为什么ulimit无法成功限制常驻记忆,以及如何?"

根据setrlimit的手册页:

RLIMIT_RSS

指定进程驻留集的限制(以页为单位)(驻留在RAM中的虚拟页数)。 这个限制仅在Linux 2.4.x中有效,x <30,并且仅影响对madvise(2)的调用,指定MADV_WILLNEED

您可能想要通过ulimit -v设置虚拟内存大小

您可以使用cgroups限制驻留内存。 请参阅常驻集大小(RSS)限制不起作用