0

0

Linux如何限制用户的内存使用 cgroups基础配置教程

P粉602998670

P粉602998670

发布时间:2025-06-29 13:50:02

|

882人浏览过

|

来源于php中文网

原创

限制linux用户的内存使用主要通过cgroups技术实现。具体步骤包括:1. 检查系统是否支持cgroups,查看/proc/cgroups文件及/sys/fs/cgroup/memory目录结构;2. 若未自动挂载,手动执行mount命令挂载memory cgroup controller;3. 创建新的cgroup目录并设置memory.limit_in_bytes文件以限制内存;4. 将目标进程pid写入tasks文件以应用限制;5. 通过修改user.slice目录下的memory.limit_in_bytes文件限制特定用户内存使用;6. 使用memory.usage_in_bytes和memory.stat等文件监控内存使用情况;7. 删除cgroup时需确保无运行进程;8. 设置不当可能导致oom killer误杀进程,需调整swappiness和oom_control参数;9. cgroups v1与v2存在差异,推荐新系统使用更简洁强大的cgroups v2。

Linux如何限制用户的内存使用 cgroups基础配置教程

限制Linux用户的内存使用,主要靠cgroups(Control Groups)技术。简单来说,cgroups就像一个资源管理器,可以限制特定进程或用户组能使用的CPU、内存、磁盘I/O等资源。这对于服务器稳定性和防止恶意程序占用过多资源至关重要。

Linux如何限制用户的内存使用 cgroups基础配置教程

cgroups基础配置教程

Linux如何限制用户的内存使用 cgroups基础配置教程

如何查看系统是否支持cgroups?

最简单的办法是检查/proc/cgroups文件。如果存在,说明你的系统内核支持cgroups。更进一步,可以执行ls /sys/fs/cgroup/memory/命令,如果看到类似user.slicesystem.slice等目录,说明memory cgroup controller已经挂载并可用。如果目录不存在,可能需要手动挂载。挂载命令通常是mount -t tmpfs cgroup_root /sys/fs/cgroup,然后mkdir /sys/fs/cgroup/memorymount -t cgroup -o memory cgroup_memory /sys/fs/cgroup/memory。不过,现代Linux发行版通常会自动处理这些。

如何创建一个cgroup并限制内存?

首先,在/sys/fs/cgroup/memory/下创建一个新的目录,例如test_groupmkdir /sys/fs/cgroup/memory/test_group。然后,进入这个目录:cd /sys/fs/cgroup/memory/test_group

Linux如何限制用户的内存使用 cgroups基础配置教程

限制内存的关键在于修改memory.limit_in_bytes文件。例如,要限制为100MB,可以执行echo 100M > memory.limit_in_bytes。注意,这里的大小单位可以是K、M、G等。

接下来,需要将要限制的进程ID(PID)写入tasks文件。假设要限制的进程PID是1234,执行echo 1234 > tasks。这样,PID为1234的进程就被限制在100MB内存内了。

如果进程试图使用超过限制的内存,默认情况下,cgroup会尝试回收内存。如果回收失败,并且memory.oom_control设置为1(默认值),进程会被OOM killer杀死。

如何限制特定用户的内存使用?

要限制特定用户的内存,可以结合systemduser.slicesystemd会自动为每个用户创建一个slice,并管理其进程。

首先,找到对应用户的user.slice目录,通常在/sys/fs/cgroup/memory/system.slice/user-.slice/,其中是用户的用户ID。

然后,与之前类似,修改该目录下的memory.limit_in_bytes文件来限制用户的总内存使用。例如,限制用户UID为1000的内存使用为200MB:echo 200M > /sys/fs/cgroup/memory/system.slice/user-1000.slice/memory.limit_in_bytes

需要注意的是,这种方式限制的是用户启动的所有进程的总内存使用。

独响
独响

一个轻笔记+角色扮演的app

下载

如何监控cgroup的内存使用情况?

在cgroup目录下,有几个文件可以用来监控内存使用情况。memory.usage_in_bytes显示当前cgroup使用的总内存量,包括缓存。memory.stat提供更详细的统计信息,例如RSS、cache等。

可以使用cat memory.usage_in_bytes来查看当前使用量。

另外,memory.failcnt记录了内存分配失败的次数,如果这个值持续增加,可能意味着内存限制过于严格。

如何删除一个cgroup?

删除cgroup非常简单,只需要删除对应的目录即可:rmdir /sys/fs/cgroup/memory/test_group。但是,在删除之前,需要确保该cgroup下没有正在运行的进程,否则会报错。可以将进程从tasks文件中移除,或者直接杀死进程。

为什么设置了内存限制,进程还是被OOM killer杀了?

这可能是因为除了memory.limit_in_bytes之外,还有其他因素影响。例如,memory.swappiness控制着使用swap的积极程度。如果memory.swappiness设置为0,系统会尽量避免使用swap,即使还有空闲的swap空间,也可能导致OOM。

另外,memory.oom_control的设置也很重要。如果oom_kill_disable设置为1,即使进程超过了内存限制,也不会被OOM killer杀死,而是会无限期地等待内存。这可能会导致系统假死。

还需注意,cgroup的内存限制是硬限制,一旦超过,就会触发OOM killer。因此,在设置内存限制时,需要留有一定的余量,避免误杀。

cgroups v1和cgroups v2有什么区别?我应该使用哪个?

cgroups有两个主要版本:v1和v2。v1是最初的版本,使用多个独立的hierarchy来管理不同的资源(CPU、内存、I/O等)。v2是重新设计的版本,使用统一的hierarchy,并且引入了一些新的特性,例如更细粒度的资源控制。

选择哪个版本取决于你的Linux发行版和你的需求。较新的发行版通常默认使用cgroups v2。可以使用mount | grep cgroup2命令来检查是否挂载了cgroups v2。

cgroups v2的配置方式与v1略有不同。例如,在v2中,不再有tasks文件,而是使用cgroup.procs文件。此外,v2中的一些参数名称也发生了变化。

总的来说,如果你的发行版支持cgroups v2,并且你不需要与旧系统兼容,那么建议使用cgroups v2,因为它更简洁、更强大。但如果你的发行版仍然使用cgroups v1,或者你需要与旧系统兼容,那么就只能使用cgroups v1。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1373

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

705

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

295

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

779

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

575

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

548

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

300

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

381

2023.07.25

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

2

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号