Ubuntu下限制进程使用内存资源的方法(cgroup)

Ubuntu下限制进程使用内存资源的方法(cgroup),第1张

最近由于项目的需要,跑某个程序的时候需要限制其内存资源的使用,例如限制某个进程只能使用1G的内存资源贺裂郑。

这时候有几种可选的方法,一种就是使用限制内存条件的物理机器,比如你限制禅颂4G内存那我就用只有4G内存的机子。但是这种情况不方便,也不灵活,如果限制1G,甚至更小的内存资源呢,上哪去找符合这样条件的物理机器呢?因而从硬件上进行限制就非常笨拙,自然而然就想到用软件的方法进行灵活的限制。

之前搜索发现,linux下的ulimit命令可以对shell进程所用资源进行限制,但是发现其中对于内存资源使用的命令"-m"只对linux内核版本2.x的才有效,之后版本的都已经无效的。(怪不得我说跑的时候咋一点作用都没有,也算是替大家踩坑了...)

后来发现还有一源桥种方法就是使用cgroup来对资源进行限制,推荐!!

下面讲一下Ubuntu上使用cgroup限制进程内存的方法:

1、安装命令

2、进入相应的目录,一般会下如下所示的位置中:

3、在该目录下创建自己的组目录

会看到在该目录下面会有很多文件,而我们只需要用到其中memory.limit_in_bytes文件

4、限制内存大小,写入memory.limit_in_bytes文件

这里1G默认单位是B,也就是你写成1*1024*1024也是一样的

5、具体使用

这里test就是上面第3步,我们在/sys/fs/cgroup/memory/目录下自己创建的组目录,然后之后跟上要执行的命令,就可以对执行的命令进行内存资源限制啦!

比较合理和常用的设置是: 最低可设置512M或是1024M,最高设置为物理内存1.5倍左右,也就是1024*8*1.5=12288M。 win10系统如果是32位的,那么只支持3.2G,虚拟内存设置为4800;如果是64位的,那么支持3.2G以上的内存,虚拟内存设置为12000。

win10取消内存限制方法:

首先,在屏幕左下角的Win徽标处右击鼠标,然后点击“运行”,打开运笑和行窗口。在运行窗口中输入 msconfig,回车。在打开的“系统配置”窗口中切换到“引导”选项卡。再选中你当前的 *** 作系统,点击“高级选项”按钮。

在高级选项中,便可以看到当前的“最大内存”数量了。如果这里显示的最大内存数与你实际安装的内存容量相比偏小,则需要将其修弯升隐改为默认值(即启用全部可用的内存容量)。

修改方法:先勾选“最大内存”(勾选后才能修改),然后将其值清空(也就是默认值:启用全部内存),最后点击“确定”保存修改。回到之前的窗口后再次点击“确定”,这时将会d出一个对话框,提示重启系统。重启之后,再去查看可用内存埋厅,就会发现已经正常了。

swap是一块磁盘空间或者一个本地文件

/proc/sys/vm/swappiness 可以设置服务器使用 swap 的积极程度。取值范围为0-100,值越大,越积极使用swap,更倾向于衡伏回收匿名页值越小,越消极使用swap,更倾向于回收文件页。

即使swap设置为0,当剩余内存+文件页小于页高阈值( pages_high )的时候,也会发生swap

Linux有专门的内核线程 kswapd0 定期回收内存,为了衡量内存的使用情况, kswapd0 定义了三个内存阈值:页最小阈咐携携值 pages_min 、页低阈值 pages_low 和页高阈值 pages_high ,剩余内存使用 pages_free 表示。

kswapd0 定期扫描内存的使用情况,并根据剩余内存和这三个阈值的关系进行内存回收 *** 作。

pages_free <pages_min :进程可用内存耗尽,只有内核才可以分配内存

pages_min <pages_free <pages_low :内存压力较大, kswapd0 会执行内存回收,直到剩余内存大于高阈值为止

pages_low <pages_free <隐友 pages_high :内存有一定压力,但还可以满足新内存请求

pages_free >pages_high :剩余内存较多,没有内存压力。

这些阈值可以通过内核选项来 proc/sys/vm/min_free_kbytes 间接设置。 min_free_kbytes 设置了页最小阈值( pages_min )。 pages_low=pages_min*5/4 , pages_high=pages_min*3/2

/etc/security/limits.conf

通过这个配置文件可以对每个登录的会话进行限制,这种限制不是全局的,也不是永久的,只在会话期间起作用。

通常,对单个用户的限制优先级高于对用户组的限制

可以使用以下方式限制内存使用

语法

<domain><type><item><value>

详见 limits.conf(5) - Linux man page

/proc/sys/vm/overcommit_memory 控制内核使用虚拟内存的模式,可以设置为以下值


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12511105.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存