Laz*_*zer 40 process memory limit
我需要测试一个内存管理过程。
limitmemory 400k -p <pid>
有没有办法在unix中做到这一点?任何常见的 Unix 实用程序都很棒。
pol*_*mon 27
ulimit -v
,它是一个内置的外壳,但它应该做你想做的。
我有时在初始化脚本中使用它:
ulimit -v 128k
command
ulimit -v unlimited
Run Code Online (Sandbox Code Playgroud)
但是,您似乎想要在程序运行时操作最大可分配内存的方法,对吗?可能类似于renice
操纵优先级。
然而,据我所知,没有这样的工具。
Gil*_*il' 12
要在启动程序时设置限制,请使用ulimit -v 400
,如polemon 所示。这为 shell 及其所有后代设置了限制,因此在脚本中您可能想要使用类似的东西(ulimit -v 400; myprogram)
来限制范围。
如果您需要更改正在运行的进程的限制,则没有实用程序。您必须获得执行setrlimit
系统调用的进程。这通常可以通过调试器来完成,尽管它并不总是可靠地工作。以下是使用 gdb 执行此操作的方法(未经测试;9 是RLIMIT_AS
Linux 上的值):
gdb -n -pid $pid -batch -x /dev/stdin <<EOF
call setrlimit(9, {409600, -1})
detach
quit
EOF
Run Code Online (Sandbox Code Playgroud)
Cri*_*itu 12
我对此不太确定,但您也可以使用cgroups来限制内存使用。cgroups 的优点是你可以控制已经在运行的进程。顺便说一下,systemd会使用 cgroups 来控制系统服务。
不幸的是,我进行了一些试验,它们在我的 Fedora 13 系统上似乎不太好用。
Luc*_*lli 12
在内核 >=2.6.36 和 util-linux >=2.21 的 Linux 系统上,您可以使用prlimit命令设置进程资源限制:
prlimit --as=400000 --pid <pid>
Run Code Online (Sandbox Code Playgroud)
这会将进程可以使用的最大虚拟内存量限制为 400000。您可以在 中找到可以为给定进程限制的完整资源列表man 2 prlimit
。
正如评论和联机帮助页中所述,限制 RSS 的数量在内核 > 2.4.0 和 <2.4.30 中不起作用。