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

Bash 在centos 7中使用pid进行内存限制预处理,bash,centos,Bash,Centos,我希望在脚本中使用pid将内存限制在一个进程中,我希望看看我可以使用什么,比如cpulimit或其他一些软件,Linux中进程的内存限制通常如下所示: $ ulimit -v [memory limit kilobytes] $ ./[program who's memory you want to limit] $ ulimit -v unlimited 您可以通过setrlimit系统调用()为当前进程设置内存限制 运行要限制谁的内存的进程。创建时,子对象将继承父对象的限制 中提琴!您现在

我希望在脚本中使用pid将内存限制在一个进程中,我希望看看我可以使用什么,比如cpulimit或其他一些软件,Linux中进程的内存限制通常如下所示:

$ ulimit -v [memory limit kilobytes]
$ ./[program who's memory you want to limit]
$ ulimit -v unlimited
  • 您可以通过
    setrlimit
    系统调用()为当前进程设置内存限制
  • 运行要限制谁的内存的进程。创建时,子对象将继承父对象的限制
  • 中提琴!您现在正在运行子进程,并根据自己的喜好设置内存限制
  • 重置父级的内存限制(这不会影响子级!)
  • 实际上,这看起来是这样的:

    $ 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。所以尽管这是可能的

    但是如果您完全决定动态更改现有进程的内存限制,可以使用。您所要做的就是创建一个具有特定内存限制的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
    

    这种方法更接近您所要求的,但是第一种方法要简单得多,如果它对您的问题可行的话,我强烈推荐它。祝你好运

    Linux中进程的内存限制通常如下所示:

    $ ulimit -v [memory limit kilobytes]
    $ ./[program who's memory you want to limit]
    $ ulimit -v unlimited
    
  • 您可以通过
    setrlimit
    系统调用()为当前进程设置内存限制
  • 运行要限制谁的内存的进程。创建时,子对象将继承父对象的限制
  • 中提琴!您现在正在运行子进程,并根据自己的喜好设置内存限制
  • 重置父级的内存限制(这不会影响子级!)
  • 实际上,这看起来是这样的:

    $ 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。所以尽管这是可能的

    但是如果您完全决定动态更改现有进程的内存限制,可以使用。您所要做的就是创建一个具有特定内存限制的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
    

    这种方法更接近您所要求的,但是第一种方法要简单得多,如果它对您的问题可行的话,我强烈推荐它。祝你好运

    可以尝试使用cgroup,ref:您是在询问编写代码还是操作系统级配置?后者在这里是离题的,最好是在。您可以尝试使用cgroups,ref:您是在询问编写代码还是操作系统级配置?后者在这里是离题的,在这里更受欢迎。