Linux在内存用尽的情况下,整个界面,包括tty和ctrl-alt-F1都会卡住难以响应。虽然Linux内核有OOM Killer机制杀掉吃内存的进程,但经常内存用尽时连OOM Killer都无法动作。

本篇讲述如何用cgroups限制内存防止整个Linux因内存用尽卡死。

因内存用尽卡住时怎么办

  1. 如果鼠标还能动一点,可以尝试在top中杀掉吃内存的进程。但这时想进入topkill -9都很难。ctrl-alt-F1都会卡。
  2. 如果鼠标完全不能动,可以等待15分钟左右,OOM Killer可能会动作杀掉吃内存的进程,然后就可以恢复。如果15分钟还无反应,那是真卡死了。
  3. 魔法键强制安全重启。

用cgroup限制用户内存留空间给内核动作

cgroup是内核的一个资源限制功能。这里限制日常用户的内存,留500MB左右给root和内核。

我的Linux是否支持cgroup

cat /proc/self/cgroup

这里可以列出某进程所处的资源限制组。有则表示内核支持cgroup

安装cgroup相关工具

我们要用到cgconfigparsercgrulesengd这两个工具。安装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因内存用尽卡死的更多相关文章

  1. Linux的内存机制(转载)

    今天我们来谈谈Linux的内存机制. 首先我们理一下概念 一.什么是linux的内存机制? 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成, ...

  2. linux内核内存分配(三、虚拟内存管理)

    在分析虚拟内存管理前要先看下linux内核内存的具体分配我開始就是困在这个地方.对内核内存的分类不是非常清晰.我摘录当中的一段: 内核内存地址 ============================ ...

  3. Linux的内存回收和交换

    Linux的内存回收和交换 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问问题和甄误反馈,共同进步. 微博ID:or ...

  4. 转载:Linux Used内存到底到哪里去了?

    转自:http://blogread.cn/it/article/6264?f=wb2 有时在Linux下会碰到这样的问题:ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了 ...

  5. Linux Used内存到底哪里去了?

    原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: Linux Used内存到底哪里去了? 前几天 纯上 同学问了一个问题: 我ps aux看到的RSS内存只有不到30M,但是free看 ...

  6. 深度讲解Linux内存管理和Linux进程调度-打通任督二脉

    我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU.内存资源等的真正分布,具体的工作机制,这使得他 ...

  7. 如何使用Linux命令行查看Linux服务器内存使用情况?

    一个服务器,最重要的资源之一就是内存,内存够不够用,是直接关系到系统性能的关键所在. 本文介绍如何查看Linux服务器内存使用情况, 1.free命令 free -m [root@localhost ...

  8. Linux堆内存管理深入分析(下)

     Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分 ...

  9. Linux堆内存管理深入分析(上)

    Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全   0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...

随机推荐

  1. 矩阵LU分解的MATLAB与C++实现

    一:矩阵LU分解 矩阵的LU分解目的是将一个非奇异矩阵\(A\)分解成\(A=LU\)的形式,其中\(L\)是一个主对角线为\(1\)的下三角矩阵:\(U\)是一个上三角矩阵. 比如\(A= \beg ...

  2. jzoj 3431. 【GDOI2014模拟】网格

    Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m.现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过 ...

  3. 你必须要知道的babel二三事

    1. 什么是babel 本文基于的babel版本是7.11.6,本文所有示例github Babel is a toolchain that is mainly used to convert ECM ...

  4. 第1课 - 学习 Lua 的意义

    第1课 - 学习 Lua 的意义 1.Lua 简介 (1) 1993年.巴西 (2) 小巧精致的脚本语言,大小只有 200K (3) 用标准C语言写成,能够在所有的平台上编译运行 (4) 发明的目标是 ...

  5. 如何借助 IDEA 数据库管理工具可视化使用 TDengine?

    什么是IDEA Database管理工具? 这里首先介绍下IDEA,IDEA全称IntelliJ IDEA,是Java语言开发的集成环境,IntelliJ在业界被公认为最好的Java开发工具之一. I ...

  6. Linux实战(13):Ubuntu被远程

    此方法采用的xrdp原生方案,优点兼容性比较好. 安装xrdp sudo apt install xrdp #最高权限安装xrdp 修改配置 nano /etc/xrdp/startwm.sh #使用 ...

  7. k8s volume存储卷

    k8s volume存储卷   介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价, ...

  8. 如何在 PyPI安装python的软件包?

    安装软件包 本节介绍如何安装Python的基本知识.包裹. 需要注意的是,这个上下文中的“包”一词被用作分布(即要安装的一组软件),而不是指包装在Python源代码中导入(即模块的容器).Python ...

  9. 4.Scala语法02 - 函数

  10. [GXYCTF2019]禁止套娃 1 &无参数RCE

    [GXYCTF2019]禁止套娃 1 啥都没有那只能上扫描器来一探究竟了. 扫完没有啥结果,但网上找了一下说是git泄露,但是我这里显示了403. <?php include "fla ...