在centos 7中使用pid进行内存限制预处理

时间:2019-01-03 01:21:46

标签: bash centos

我希望将内存限制为在脚本中使用pid的进程,我希望查看我可以使用的东西,例如cpulimit或某些其他软件

1 个答案:

答案 0 :(得分:1)

Linux中进程的内存限制通常是这样的:

  1. 您可以通过setrlimit系统调用(man page)为当前进程设置内存限制
  2. 运行要限制谁的内存的进程。孩子将在创建时继承父母的限制。
  3. 中提琴!您现在正在运行子进程,并将内存限制设置为自己喜欢的水平。
  4. 重置父母的记忆力限制(不会影响孩子!)

实际上,它是这样的:

$ ulimit -v [memory limit kilobytes]
$ ./[program who's memory you want to limit]
$ ulimit -v unlimited

Firejail是一个很好的工具,可以做到这一点。使用Firejail,我们可以发芽一个具有512字节内存限制的子进程,如下所示:

firejail --rlimit-as=number [command]

但是,与ulimit不同,默认情况下,firejail不随CentOS一起安装。

我意识到这不是您想要的精确。我告诉您如何启动具有内存限制的进程,而严格地说,您仅询问如何修改正在运行的进程可用的内存PID。

与CPU和文件访问限制不同,如果在进程创建时而不是在运行时执行,则任何Linux发行版上的内存限制都非常简单。这是由于内核的设计,尤其是我之前提到的setrlimit syscall。因此,尽管有可能。

但是,如果绝对确定要动态更改现有进程的内存限制,则可以使用cgroups完成。您所要做的就是创建一个具有特定内存限制的cgroup,并将您的进程放入该cgroup中。您应该执行以下操作:

mkdir /sys/fs/cgroup/memory/groupname
echo 1000 > /sys/fs/cgroup/memory/groupname/memory.limit_in_bytes
echo pid > /sys/fs/cgroup/memory/groupname/cgroup.procs

该方法更接近您的要求,但是第一种方法要简单得多,如果您的问题完全可行,我强烈建议您使用。祝你好运!