如何修改Linux内核参数vm.swappiness

目录
  • 修改Linux内核参数vm.swappiness
    • 调整vm.swappiness的方法
  • 了解vm.swappiness
    • 使用交换
    • vm.swappiness
    • 小结一下吧
  • 总结

修改Linux内核参数vm.swappiness

内核参数vm.swappiness控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系。

值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。

默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区。

swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;swappiness=100的时候表示积极使用swap分区,并把内存上的数据及时搬运到swap空间。(网上有的说,对于3.5以后的内核和RedHat 2.6.32之后的内核,设置为0会禁止使用swap,从而引发out of memory,这种情况可以设置为1。)

需要根据服务器运行的程序类型,来设置不同的参数值。例如,对于Oracle一般设置为10;对于MySQL一般设置为1,尽可能不用swap分区。

调整vm.swappiness的方法

1、查看参数值:

cat /proc/sys/vm/swappiness

2、临时调整:

sysctl vm.swappiness = 10 
cat /proc/sys/vm/swappiness

3、永久调整:

vi /etc/sysctl.conf 

修改vm.swappiness=10

然后加载参数:

sysctl -p

完毕。

了解vm.swappiness

Linux内核是一个相当复杂的软件,具有许多组件,例如模块,接口和配置文件[1]。

些组件可以配置有特定值,以实现组件[2,3,4]的所需行为或操作模式。随后,此设置将直接影响整个Linux系统的行为和性能。

Linux内核及其组件的当前值可通过特殊接口/ proc目录[5]进行访问。这是一个虚拟文件系统,其中单个文件实时填充值。这些值表示Linux内核所处的实际状态。

您可以使用cat命令访问/ proc目录中的各个文件,如下所示:

$ cat / proc / sys / net / core / somaxconn
128
$

这些内核参数之一称为vm.swappiness。它“控制从运行时内存中交换出来的相对权重,与从系统页面缓存中删除内存页面相反” [6]。从Linux内核2.6版开始,引入了此值。它存储在文件/ proc / sys / vm / swappiness中。

使用交换

在1990年代初期,使用swap [6]是使用小型UNIX计算机的重要组成部分。当讨厌的内存泄漏干扰您的工作时,它仍然很有用(例如,在您的车辆中装有备用轮胎)。机器将变慢,但在大多数情况下仍可用于完成其分配的任务。自由软件开发人员一直在减少和消除程序错误方面取得了长足的进步,因此在更改内核参数之前,请先考虑将其更新为应用程序和相关库的较新版本。

如果您运行大量任务,则非活动任务将被换出到磁盘上,从而更好地利用了活动任务中的内存。视频编辑和其他占用大量内存的应用程序通常建议使用一定数量的内存和磁盘空间。如果您有一台无法升级内存的旧机器,那么提供更多的交换空间可能是一个不错的临时解决方案(有关更多信息,请参见[6])。

交换可以发生在单独的分区或交换文件上。该分区速度更快,并且受到许多数据库应用程序的青睐。文件方法更加灵活(请参阅Debian GNU / Linux中的dphys-swapfile软件包[7])。具有多个用于交换的物理设备允许Linux内核选择最快速可用的设备(较低的延迟)。

vm.swappiness

vm.swappiness的默认值为60,它表示激活交换之前可用内存的百分比。值越低,使用的交换越少,并且物理内存中保留的内存页越多。

60的值是一个折衷方案,非常适合现代台式机系统。建议将较小的值用于服务器系统。正如Red Hat Performance Tuning手册指出的那样[8],对于数据库工作负载,建议使用较小的swappiness值。

例如,对于Oracle数据库,Red Hat建议将swappiness的值设置为10。相反,对于MariaDB数据库,建议将swappiness的值设置为1 [9]。

更改值直接影响Linux系统的性能。定义了这些值:

  • * 0:禁用交换
  • * 1:不完全禁用交换的最小数量
  • * 10:当系统中有足够内存时为提高性能而推荐的值
  • * 100:主动交换

如上所示,cat命令有助于读取该值。同样,sysctl命令为您提供相同的结果:

#sysctl vm.swappiness
vm.swappiness = 60
#

请记住,sysctl命令仅对管理用户可用。要设置该值,请在/ proc文件系统中临时设置该值,如下所示:

#回声 10 > / PROC / SYS / VM / swappiness

或者,您可以使用sysctl命令,如下所示:

#的sysctl -w vm.swappiness = 10

要永久设置该值,请以管理用户身份打开文件/etc/sysctl.conf并添加以下行:

vm.swappiness = 10

小结一下吧

越来越多的Linux用户正在运行虚拟机。除了实际控制硬件的管理程序外,每个人都有其自己的内核。虚拟机具有为其创建的虚拟磁盘,因此更改虚拟机内部的设置将获得不确定的结果。首先尝试更改虚拟机管理程序内核的值,因为它实际上控制着计算机中的硬件。

对于不再能够升级的旧计算机(已经具有最大支持的内存),您可以考虑在计算机中放置一个小型固态磁盘,以将其用作其他交换设备。由于存储单元因大量写入而失败,因此这显然将成为一种消耗,但是可以以非常低的成本将机器的寿命延长一年或更长时间。与交换到普通磁盘相比,较低的延迟和快速读取将提供更好的性能,从而为RAM提供中间结果。这应该允许您使用较低的vm.swappiness值以获得最佳性能。您将不得不尝试。SSD设备正在快速变化。

如果您有多个交换设备,请考虑使其成为RAID设备以跨可用设备对数据进行条带化。

您可以在不重启计算机的情况下更改交换性,这是与其他操作系统相比的一大优势。

尝试仅包括您业务所需的服务。这将减少内存需求,提高性能并简化一切。

最后一点:您将为交换设备增加负载。您将需要监视它们的温度。过热的系统将降低其CPU频率并降低速度。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • linux cgroups详细介绍

    Cgroups是什么? cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架.简单说,cgroups 可以限制.记录任务组所使用的物理资源.本质上来说,cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的. 本文以 Ubuntu 16.04 系统为例介绍 cgroups

  • 浅谈Linux的虚拟内存

    由来 虚拟内存 毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一.我想主要是由于内存的重要"战略地位".CPU太快,但容量小且功能单一,其他 I/O 硬件支持各种花式功能,可是相对于 CPU,它们又太慢.于是它们之间就需要一种润滑剂来作为缓冲,这就是内存大显身手的地方. 上图是虚拟内存最简单也是最直观的解释. 操作系统有一块物理内存(中间的部分),有两个进程(实际会更多)P1 和 P2,操作系统偷偷地分别告诉 P1 和 P2,我的整个内存都是你的,随便用,管够.可事实上呢,操作系统只

  • Linux系统中swap分区的设置与增加/删除

    1. 什么是swap分区 Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中.swap分区是从磁盘空间划分而来,有的是单独使用一个分区,有的是把一个大文件当做swap. 2. 官方关于swap设置 Redhat6.4 官方推荐(我们使用CentOS 6.4) 推荐的系统交换空间 系统中的

  • 如何修改Linux内核参数vm.swappiness

    目录 修改Linux内核参数vm.swappiness 调整vm.swappiness的方法 了解vm.swappiness 使用交换 vm.swappiness 小结一下吧 总结 修改Linux内核参数vm.swappiness 内核参数vm.swappiness控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系. 值越大,表示越积极使用swap分区,越小表示越积极使用物理内存. 默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区.

  • Linux内核参数调整方法

    ulimit设置 ulimit -n 要调整为100000甚至更大. 命令行下执行 ulimit -n 100000即可修改.如果不能修改,需要设置 /etc/security/limits.conf,加入 * soft nofile 262140 * hard nofile 262140 root soft nofile 262140 root hard nofile 262140 * soft core unlimited * hard core unlimited root soft co

  • CentOS中运行PostgreSQL需要修改的内核参数及配置脚本分享

    PostgreSQL在CentOS上部署的时候,需要设置一些操作系统的参数,官方文档上列举了一些(传送门).除了这些,还有一些其他的设置,如单个用户允许的最大进程数,单个进程的最大句柄数等,这些一般也需要调整,否则系统会在一些条件下出现问题,或者性能下降.下面从系统资源限制类和内存参数优化类来进行说明. 系统资源限制类 1.单个用户允许的最大进程数:linux系统默认是1024,如果PG的最大连接数超过1024,则实际的连接数会小于1024(PG的postmaster进程,checkpointe

  • 高并发nginx服务器的linux内核优化配置讲解

    由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态web内容服务器.反向代理或者提供压缩服务器的服务器时,期内核参数的调整都是不同的,这里针对最通用的.使Nginx支持更多并发请求的TCP网络参数做简单的配置: 以下linux 系统内核优化配置均经在线业务系统测试,并发10万左右服务器运行

  • 浅谈安装ORACLE时在Linux上设置内核参数的含义

    前两天看到一篇Redhat官方的Oracle安装文档,对于Linux内核参数的修改描述的非常清晰. 安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其中最主要的是和内存相关的参数设置. SHMMAX参数:Linux进程可以分配的单独共享内存段的最大值.一般设置为内存总大小的一半.这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,因此对于安装Oracle数据库的系统,shmmax的值应该比内存的二分之一大一些

  • Linux内核启动参数详解

    1.环境: Ubuntu 16.04 Linux linuxidc 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 2.查看当前linux内核的启动参数: cat /proc/cmdline 笔者的输出内容如下: BOOT_IMAGE=/boot/vmlinuz-4.4.0-89-generic root=UUID=bef418fa-4202-4513-b39

  • Linux利用Sysctl命令调整内核参数

    前言 sysctl 命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录 /proc/sys 中.它包含一些TCP/IP堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百个系统变量. 1.常见用法 列出所有的变量并查看 sysctl -a | less 修改某变量的值 sysctl -w 变量名=变量值 #sysctl -w vm.max_map_count=262144 读一个指定的变量,例如 kernel.msgm

  • 增强Linux内核中访问控制安全的方法

    背景 前段时间,我们的项目组在帮客户解决一些操作系统安全领域的问题,涉及到windows,Linux,macOS三大操作系统平台.无论什么操作系统,本质上都是一个软件,任何软件在一开始设计的时候,都不能百分之百的满足人们的需求,所以操作系统也是一样,为了尽可能的满足人们需求,不得不提供一些供人们定制操作系统的机制.当然除了官方提供的一些机制,也有一些黑魔法,这些黑魔法不被推荐使用,但是有时候面对具体的业务场景,可以作为一个参考的思路. Linux中常见的拦截过滤 本文着重介绍Linux平台上常见

  • 简单谈谈Linux内核定时器

    软件意义上的定时器最终依赖硬件定时器来实现, 内核在时钟中断发生后检测各定时器是否到期 , 到期后的定时器处理函数将作为软中断在底半部执行 .实质上,时钟中断处理程序会 换起TIMER_SOFTIRQ软中断 ,运行当前处理器上到期的所有定时器. 总结起来还是软中断的流程 a.注册软中断处理函数 /*/linux/kernel.timer.c*/ void __init init_timers(void) -->open_softirq(TIMER_SOFTIRQ, run_timer_softi

  • linux内核select/poll,epoll实现与区别

    下面文章在这段时间内研究 select/poll/epoll的内核实现的一点心得体会: select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写. select/poll的实现很类似,epoll是从select/poll扩展而来,主要是为了解决select/poll天生的缺陷. epoll在内核版本2.6以上才出现的新的函数,而他们在linux内核中的实现都是十分相似. 这三种函数都需要设备驱动提供poll回调函数,对于套接字而言,他们是

随机推荐