如何限制linux中特定进程的内存使用?

use*_*222 7 linux virtual-memory memory-management

我已经为一个课程编写了一个程序,我的教授将在各种低内存环境中测试该程序,以查看当程序内存不足时它的行为。有没有一种方法可以在不创建虚拟机的情况下在低内存环境中模拟执行?

bas*_*ero 8

你会想要使用ulimit

ulimit 可用于限制内存利用率(除其他外)

这是一个将内存使用量设置得如此之低/bin/ls(大于/bin/cat)的示例,该示例不再有效,但/bin/cat仍然有效。

$ ls -lh /bin/ls /bin/cat
-rwxr-xr-x 1 root root 25K May 24 2008 /bin/cat
-rwxr-xr-x 1 root root 88K May 24 2008 /bin/ls
$ date > test.txt
$ ulimit -d 10000 -m 10000 -v 10000
$ /bin/ls date.txt
/bin/ls: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory
$ /bin/cat date.txt
Thu Mar 26 11:51:16 PDT 2009
$
Run Code Online (Sandbox Code Playgroud)

注意:如果我将限制设置为 1000 KB,两个程序都不起作用,因为它们加载了库,从而增加了它们的大小。超过 1000 KB。

-d 数据段大小

-m 最大内存大小

-v 虚拟内存大小

运行 ulimit -a 以查看 ulimits 可以设置的所有资源上限。