百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

望着业务和钱包!对Linux交换分区(Swap)的思考及实战配置

sinye56 2024-12-01 03:52 11 浏览 0 评论

1 前言

Linux系统中物理内存不足时,操作系统会将运行中的程序(比较闲的程序)暂时拿到交换分区(Swap)中,以保证物理内存来运行其它程序。等Swap中的程序要运行时,再从Swap分区中恢复保存的数据到内存中。

2 使用背景

现在服务器内存越来越大,动不动就16G、32G、64G甚至上百G,操作系统官网也给建议尽量使用系统物理内存,交换分区(SWAP)在应用中所占的比例越来越小,甚至不使用了。

可是对于个人、小个体甚至小微企业来说服务器的费用还是能省则省,内存已然捉襟见肘。本人有一台1核/2G的服务器和一台2核/4G的服务器,部署了五六个应用后就到极限了,动不动就崩溃了。

特别在微服务大行其道的今天,一个项目上去内存就占满了。所以,再嚼嚼交换分区,一切为了钱。

3 Swap分区大小选择

Swap分区大小设置的建议:

  1. 物理内存小于2GB,Swap建议为物理内存的2倍;
  2. 物理内存2GB~8GB,Swap分区大小等于物理内存;
  3. 物理内存8GB~64GB,Swap分区大小最小为8G;
  4. 物理内存大于64GB,Swap分区至少为16G;

事实上,Swap分区的大小并不取决于物理内存的量,而是根据业务场景,客户需求和系统中内存的负荷,所以抛开业务场景、显示来谈Swap意义并不大;如果我的服务器内存很大,也不会瞎折腾O(∩_∩)O哈哈~

4 何时使用Swap

不是等所有的物理内存都消耗完毕之后,才会去使用Swap的空间,什么时候使用是由swappiness参数值控制及系统调度的。

目前云服务器的Swap起始状态都是0,swappiness也为0,这就表示只能使用物理内存,如下图:

cat /proc/sys/vm/swappiness

该值在CentOS 6上是60,在CentOS 7上建议是30,可以看出随着硬件的降价,交换分区的比重越来越轻了。

swappiness设置为0时会最大限度使用物理内存,然后才是Swap空间;设置为100的时候表示积极的使用swap分区,并且把内存上的数据及时地搬运到swap空间里面。

现在生产服务器用户动不动上百万,内存上百G,对用户体验,相应速度都要求极高,我们可以降低系统对Swap的使用,甚至全部使用内存。

5 如何修改swappiness参数

5.1 临时性修改,系统重启回复默认

sysctl vm.swappiness=10

cat /proc/sys/vm/swappiness

5.2 永久修改,重启生效

在/etc/sysctl.conf 文件里添加如下参数:

vm.swappiness=10

# 加载配置
sysctl -p

6 创建交换分区

云服务器默认交换分区为0,默认只使用物理内存;我的小服务器只能手动设置开启交换分区咯!下面是创建并使用交换分区的步骤。

6.1 创建Swap分区

/dev/zero文件代表一个永远输出0的设备文件,可以用它来创建空文件。后两个参数可以控制文件大小。

dd if=/dev/zero of=/mnt/swap bs=512 count=8388616

我的服务器内存为4G,根据建议Swap大小设置为4G,创建过程有点慢,需要耐心等待。

注意:创建swap大小为bs*count=4294971392(4G)

6.2 格式化swap文件

mkswap /mnt/swap

6.3 启用swap文件(上文已提到)

临时调整

sysctl -w vm.swappiness=60

持久调整,需要重启服务器

vim  /etc/sysctl.conf
vm.swappiness=60

# 加载配置
sysctl -p

6.4 激活使用这个swap文件

激活swap文件

swapon /mnt/swap

设置自动挂载交换分区

echo "/mnt/swap swap swap defaults 0 0" >> /etc/fstab

6.5 查看交换分区状态

swapon -s

free -m

可以看到,系统并没有使用到我创建的交换空间,我的物理内存还剩1G,后面跑下程序试试。

7 删除交换分区

7.1 停止交换分区

swapoff /mnt/swapfile

7.2 删除/etc/fstab中的自动挂载

vim /etc/fstab

# 注释或删除掉
# /mnt/swapfile swap swap defaults 0 0

7.3 删除分区文件

rm /mnt/swapfile

8 总结

swappiness的值为0~100,我的CentOS 7设置为60,也就是内存使用到40%就会使用交换分区。

如果业务、经济允许,还是使用物理内存好,毕竟物理内存速度比磁盘快得多;同时交换分区如果经常大量使用,会加大系统io开销,所以该升级内存升级内存,该调整参数调整参数。

另外有一种说法,使用交换分区(Swap)会缩短硬盘使用寿命,这个没验证过,同时我用的是云服务器,无所谓了。

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: