用cgroup限制内存以防止Linux因内存用尽卡死
Linux在内存用尽的情况下,整个界面,包括tty和ctrl-alt-F1
都会卡住难以响应。虽然Linux内核有OOM Killer机制杀掉吃内存的进程,但经常内存用尽时连OOM Killer都无法动作。
本篇讲述如何用cgroups限制内存防止整个Linux因内存用尽卡死。
因内存用尽卡住时怎么办
- 如果鼠标还能动一点,可以尝试在
top
中杀掉吃内存的进程。但这时想进入top
并kill -9
都很难。ctrl-alt-F1
都会卡。 - 如果鼠标完全不能动,可以等待15分钟左右,OOM Killer可能会动作杀掉吃内存的进程,然后就可以恢复。如果15分钟还无反应,那是真卡死了。
- 魔法键强制安全重启。
用cgroup限制用户内存留空间给内核动作
cgroup是内核的一个资源限制功能。这里限制日常用户的内存,留500MB左右给root
和内核。
我的Linux是否支持cgroup
cat /proc/self/cgroup
这里可以列出某进程所处的资源限制组。有则表示内核支持cgroup
安装cgroup相关工具
我们要用到cgconfigparser
和cgrulesengd
这两个工具。安装libcgroup-tools
(可能因发行版而异)这个包。
配置cgroup规则
/etc/cgconfig.conf
中写
group users_mem_limit {
memory {
memory.limit_in_bytes = 3500000000;
}
}
这里限制共使用3.5G内存(假设共有4G内存)。用cat /proc/meminfo
查看准确的总内存大小以决定数值。
/etc/cgrules.conf
中写
@users memory users_mem_limit/
日常用户名 memory users_mem_limit/
这是将规则应用给users
组和日常用户。
接下来运行
# cgconfigparser -l /etc/cgconfig.conf
# cgrulesengd
等待两分钟,日常用户的所有进程就会被放入资源限制规则组中,新打开的进程也会自动加入。cat /proc/<PID>/cgroup
可以看某进程是否已加入组。
如果成功,将上面两条命令设置成为开机自动以root
运行就行。具体步骤略。
吃内存测试
如果想要测试这个方法的效果,可以用这个工具来吃内存(自己make
一下)。
$ ./memhog 100 9999999
它会一次吃掉100MB内存,逐渐把内存用尽(这并不能完全模拟所有程序运行时的内存使用方式,这只是个简单的测试)
其他方法
Linux有内存用尽卡死的问题,是Linux内核的OOM机制不够好。这或许是它不如Windows的一个地方。
另外许多人推荐一个叫Early OOM的程序,用它来替代Linux自身的OOM。
用cgroup限制内存以防止Linux因内存用尽卡死的更多相关文章
- Linux的内存机制(转载)
今天我们来谈谈Linux的内存机制. 首先我们理一下概念 一.什么是linux的内存机制? 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成, ...
- linux内核内存分配(三、虚拟内存管理)
在分析虚拟内存管理前要先看下linux内核内存的具体分配我開始就是困在这个地方.对内核内存的分类不是非常清晰.我摘录当中的一段: 内核内存地址 ============================ ...
- Linux的内存回收和交换
Linux的内存回收和交换 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问问题和甄误反馈,共同进步. 微博ID:or ...
- 转载:Linux Used内存到底到哪里去了?
转自:http://blogread.cn/it/article/6264?f=wb2 有时在Linux下会碰到这样的问题:ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了 ...
- Linux Used内存到底哪里去了?
原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: Linux Used内存到底哪里去了? 前几天 纯上 同学问了一个问题: 我ps aux看到的RSS内存只有不到30M,但是free看 ...
- 深度讲解Linux内存管理和Linux进程调度-打通任督二脉
我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU.内存资源等的真正分布,具体的工作机制,这使得他 ...
- 如何使用Linux命令行查看Linux服务器内存使用情况?
一个服务器,最重要的资源之一就是内存,内存够不够用,是直接关系到系统性能的关键所在. 本文介绍如何查看Linux服务器内存使用情况, 1.free命令 free -m [root@localhost ...
- Linux堆内存管理深入分析(下)
Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...
随机推荐
- 获取JSO字符串的key和value值
import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.HashMap; import java. ...
- 图解选择排序及算法优化(Java实现)
选择排序 前言 原理:每次循环对比找出最小/大值,将最值的元素交换至左侧 思想:直接选择排序(Straight Select Sort)算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并 ...
- Odoo10.0中的工作流
Odoo10.0中可以通过两种方式来实现工作流(workflow) 一种的官网API中给出的方式,链接:https://www.odoo.com/documentation/10.0/referenc ...
- Traveling by Stagecoach(POJ 2686)
原题如下: Traveling by Stagecoach Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4494 Ac ...
- swift基本数据类型使用-数组使用
目录 数组的使用 1.数组的定义 2.对可变数组的基本操作 3.数组的遍历 4.数组的合并 5. 示例 数组的使用 1.数组的定义 1> 定义不可变数组 2> 定义可变数组 2.对可变数组 ...
- 乔悟空-CTF-i春秋-Web-Upload
2020.09.03 ai 做过的题,两天不看就忘了-- 做题 题目 题目地址 thinking-- 打开网站 告诉了文件在flag.php中,所以写个php,把flag.php文件读取出来就行 盗来 ...
- STL-Deque(双端队列)与单调队列的实现
前言: STl是个好东西,虽然他在不开O2的条件下会跑的很慢,但他着实会让你的代码可读性大大提高,令你的代码看起来既简单又整洁. 双端队列: 顾名思义,双端队列是有两个头的,一个队首指针,一个队尾指针 ...
- Linux下日志文件过大解决方案
很多Linux服务器里的应用程序都是无间断的输出日志,这对于服务器的硬盘是一个很大的考验.良许之前也分享过一篇文章,介绍如何让应用程序在后台执行: linux后台执行命令:&与nohup的用法 ...
- PyCharm2020.2.1激活方法
本人亲测有效!直接看图! 安装准备 一.百度网盘链接:https://pan.baidu.com/s/151vnrZG2V4eMPW8RYqse3w 提取码:z5k0 至于Pycharm的安装在这 ...
- python-字符串,字典,列表
0x01 字符串 python单双引号都可以 str = "hello world" str_test = "yicunyiye" print(str,str_ ...