用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 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...
随机推荐
- js中数组扁平化处理
- python:接口开发
一.flask flask是一个python编写的轻量级框架,可以使用它实现一个网站或者web服务.本文就用flask来开发一个接口. flask需要先安装再引用.pip install flask ...
- 【微信小程序】常用组件及自定义组件
(一) 常用标签 组件你可以理解为传统页面开发时候的各种标签,例如 div span 等等,我这里只说一些常用的,这样就能能搭建出一个基本的页面了,但是如果想要更加美观以及拥有更好的体验,就需要 XS ...
- synchronized底层是怎么实现的?
前言 面试的时候有被问到,synchronized底层是怎么实现的,回答的比较浅,面试官也不是太满意,所以觉得要好好总结一下,啃啃这个硬骨头. synchronized使用场景 我们在使用synchr ...
- 必考算法之 Top K 问题
大家好,这里是<齐姐聊算法>系列之 Top K 问题. Top K 问题是面试中非常常考的算法题. 8 Leetcode 上这两题大同小异,这里以第一题为例. 题意: 给一组词,统计出现频 ...
- Java多线程--公平锁与非公平锁
上一篇文章介绍了AQS的基本原理,它其实就是一个并发包的基础组件,用来实现各种锁,各种同步组件的.它包含了state变量.加锁线程.等待队列等并发中的核心组件,现在我们来看一下多线程获取锁的顺序问题. ...
- 基础篇:详解JAVA对象实例化过程
目录 1 对象的实例化过程 2 类的加载过程 3 触发类加载的条件 4 对象的实例化过程 5 类加载器和双亲委派规则,如何打破双亲委派规则 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 对象的 ...
- jquery全选,全不选,反选
前台 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.o ...
- WordPress用户角色权限
[转自:群燕小站(http://www.zqunyan.com):原文链接: http://www.zqunyan.com/158.html] WordPress默认的用户角色有5个:订阅者,投稿者, ...
- Python-变量-数字类型
数字 number 整形 int 浮点型 float bool True(=1) False(=0) int_num = 10 float_num = 10.1 bool_True = True bo ...