来自Killer内核配置改变的威胁–Swappiness

我们受到非黑客攻击,是Linux内核版本3.5-rc1以及RedHat backport补丁应对swappiness=0。这是一种真实的威胁,我们一名客户受到影响,被利用OOM机制使得MySQL主数据库服务器崩溃。这个对内核的“微小”改变导致系统不能适当进行Swap,直接导致OOM机制杀掉MySQL进程。这就对如下解释产生怀疑:系统已拥有128GB内存,很多内存处于空闲状态,同时拥有128GB的空闲虚拟内存,所以在任何情况下都不该启动OOM机制。

我们本以为原因是NUMA(以前写过关于NUMA的文章),但是如果是这样的话,由于intra-node 我们就会看到一些过度的Swapping。我们通过安装numctl,配置mysql-safe,以便使用NUMA交互 模式,但是最终还是崩溃。

原来,该服务器拥有一个RHEL/Centos 6.4的新内核2.6.32-358,发布于2013年2月。此版本内核及以后版本均拥有backport补丁,系统可升级到6.4以及更高,我们期望在这一关键领域能出现很多问题。

这很令人沮丧,因为RedHat本不该去改变backport中或像RHEL6的一个生命周期中的一些行为,他们的目的很明确,像这样的事情不会发生,例如在系统5-10年生命中行为是一致的。因此当在一个产品生命周期中像这样的一个主要问题出现时,情况就很糟,诸如强制升级、配置改变、默认安装升级、监控以及审计改变等。大部分最新的Debian/Ubuntu 系统也将会有这些问题,因为他们也有更新内核,也许同样的backport.

关于swappiness,通常被工程师们所误解。它可以设置为从0-100的值,以通知内核哪个更重要,是pagecache(file cache)还是application memory。默认值为60,表示可以较多使用pagecache内存,但是这个对服务器是一个非常错误的配置。从虚拟化的角度来说,所有的服务器均需要application memory,更甚于file cache,因此我们一直设置为0,表示在swap任何application memory 之前会一直释放 file cache。但是现在,这个bug导致更少的swapping,以致大幅增加在内存压力下OOM机制起作用的机会,这个问题确实不是我们所想要的。 能够快速解决的技术方案又是怎样的?幸运的是,我们有很简单的方案。设置swappiness为1,这和0几乎是相同的优先权,以保护application memory,但是不会触发内核的改变。如此说来,1比0是更好的配置。

一如既往地,我们会为客户监控和管理这些类型问题,不断升级默认安装配置,并循环升级以影响系统。

时间: 2024-10-05 05:04:45

来自Killer内核配置改变的威胁–Swappiness的相关文章

内核配置编译

内核配置 通过在 make menuconfig 生成的菜单上做完选择,生成 .config 文件 在编译时先通过 .config 文件生成 include/config/auto.conf 和 include/linux/autoconf.h 再编译 include/config/auto.conf 在顶层 Makefile 中使用 include/linux/autoconf.h 在内核源码中使用 *******注意: 在 .config 文件生成相应文件的过程中需要内核中的 Kconfig

Android-Activity配置改变

Android-Activity配置改变 一 常见的配置改变 1 横屏竖屏转换 2 语言的改变 3 输入法的有效性切换 二 调用的重要的方法 1 @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); } 2 manifest文件中的<activity and

第3阶段——内核启动分析之make menuconfig内核配置(2)

目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到尾配置.config文件 (2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件 (3)使用厂家提供的配置config_ok文件覆盖.config文件 所以,所有的配置结果都是配置.config文件 1 在linux下通过vi指令查看.config内核配置文件 如上图所示:就是一堆配置项:

Tiny4412 Linux 内核配置流程

1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips等. ②CROSS_COMPILE:指定使用的交叉编译器的前缀.例如arm-linux-.在内核顶层的Makefile中,可以看到工具链中的编译器.链接器等都是以$(CROSS_COMPILE)作为前缀. AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld

Linux内核@系统组成与内核配置编译

Linux系统由什么组成? 由用户空间(应用程序+GNU C标准库)和内核空间(系统调用接口+内核+内核架构代码)组成. Linux内核到底是什么?以及组成. ARM的七种操作级别? 内核网络协议栈(Network Stack)的作用? 为Linux提供了丰富的网络协议(TCP/IP.PPPOE)实现.将网络协议栈放在内核中为了提高网络性能,减少CPU开销. 虚拟文件系统的作用? 为了支持多种文件系统,并为它们提供统一的操作接口. Linux内核源代码结构 关于每个文件夹中的具体内容分析:参考h

[linux内核]linux各个内核配置选项的含义以及配置

1,linux各个内核配置选项的含义 linux各个内核配置选项含义 2,make menuconfig命令的使用 Y表示加载,N表示不加载,M表示的是作为模块的方式载入内核. 3,以模块方式载入的时候如何动态加载 如何动态加载模块

[国嵌攻略][099][Linux内核配置与编译]

为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make menuconfig配置方法 1.菜单项的分类 processor type and features   处理器类型 networking support            网络协议支持 device drivers                设备驱动支持 file systems     

Linux 内核配置和编译

一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互式配置 2. make  menuconfig 基于文本模式的菜单式配置  优点:直观,简单,高效 <  > 不选择该功能  <m> 内核模块 不是随时随刻要使用的  B.o文件存到硬盘中,需要才添加到内存里面.节省内存  <*>B.O文件存到内存中,随时随地可使用的. (3). 内核配置结果 ls

Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1.      Linux体系结构简介 2.      Linux内核源码简介 3.      Linux内核配置.编译.安装 l  Linux体系结构简介 1.       Linux体系结构(linux系统构成)