CentOS7系统增加swap的操作方法实例
前言
swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关);内存不够用时系统便将内存中的部分数据腾挪到swap中,为正在运行的程序腾出内存。
使用swap能让系统运行更多或更大型的程序,但由于swap的读写速度远逊于内存,频繁使用swap可能让系统和程序有延迟卡顿。
大内存计算机swap有必要吗?
对于内存较小的计算机,swap是非常有必要的。swap的存在能让执行吃内存程序变得可能,执行慢总比不能运行或者奔溃强。但现代计算机动辄8G以上的内存,如非运行大型或专业软件,内存足够日常使用。这种情况下,swap有存在的必要吗?
答案还是看使用场景。个人电脑上运行桌面版Linux并且开启休眠功能,则应该划分不小于内存的swap分区;如果是内存足够大且常年不关机的服务器,没有swap也毫无问题。
ssd硬盘要不要设置swap?
之前的ssd硬盘有读写寿命的问题,因此不建议将swap文件或分区放到ssd硬盘上。
目前的ssd硬盘技术已经升级换代更智能,如果有swap需求,放在ssd硬盘上也没什么问题。
swap设置多大好?
如果开启休眠功能,应该划分swap分区,并且分区大小不能小于内存,建议的值是“内存大小+2G”。
不用休眠功能的服务器,swap可以为文件,一种确定swap大小的实用方法是:1G内存及以下,swap大小为内存的两倍;2-4G内存,与内存同等大小;5-16G内存,swap可固定为4G;17-32G内存,8G swap;33 G及以上,固定为16G swap。
上述方法不绝对,有特殊需求可酌情增减swap大小。
怎样增加swap?
安装操作系统时候可以分区(单独挂载点)形式指定swap,也可以在系统安装完成后动态添加和删除。
查看swap
free命令可以查看系统活动的swap信息,例如:
$ free -m
# 输出如下
# total used free shared buff/cache available
# Mem: 7976 4979 328 124 2669 2703
# Swap: 0 0 0
第二行是swap信息,可以看到没有活动的swap。
也可以用swapon命令查看活动的swap,例如:
$ swapon -s
# 没有swap信息,所以无输出
# 有swap的输出为
# Filename Type Size Used Priority
# /swap file 2097148 281052 -2
增加swap
假设我们打算运行一个非常占用内存的程序,8G物理内存不够,便可借助swap增加系统可用的虚拟内存。操作方法如下:
1、选定或创建一个作为swap的文件(也可以用分区),常用创建指定大小文件的命令有fallocate和dd。例如创建一个8G大小的文件:
# fallocate
sudo fallocate -l 8G /swap
# dd
sudo dd bs=1GB count=8 if=/dev/zero of=/swap
由于dd有复制的过程执行较慢,实践中建议用fallocate;
2、swap文件会存放内存中的数据,出于安全考虑应限制其它用户的访问:sudo chmod 0600 /swap;
3、将文件格式化为swap文件:sudo mkswap /swap;
4、启用该swap文件:sudo swapon /swap;
如果不想使用swap,可用swapoff命令卸载:sudo swapoff /swap;
5、如果希望系统启动后自动加载swap文件,在/etc/fstab文件增加一行: /swap swap swap sw 0 0
。
增加swap后,可用swapon -s或free -m命令查看swap信息。
swap相关设置
和swap最直接相关,也是影响系统性能的一个设置参数便是vm.swappiness。其值是0-100的整数,指示内存用掉百分之多少时开始使用swap。100表示尽可能使用swap,0则表示只有物理内存不够时才用上swap备胎。对于服务器,建议10-30之间。
设置和更改swappiness的命令是:sudo sysctl vm.swappiness=10
。该命令只对当前系统有效,系统重启后又恢复默认值。要想设置永久生效,在/etc/sysctl.conf中增加或更改对应的设置行:vm.swappiness = 10
。
参考
https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-7
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。
- 【LeetCode】关关刷题日记24-Leetcode 121. Best Time to Buy and Sell Stock
- 线性表的链式存储结构的实现及其应用(C/C++实现)
- [接口测试 - 基础篇] 01 你应该了解的协议基础
- 使用TensorFlow实现神经网络的介绍
- HTTP协议报文结构及抓包报文分析示例
- 必备 .NET - C# 异常处理
- Java Socket获取本机的InetAddress实例
- 机器理解大数据秘密:聚类算法深度剖析
- BZOJ 3668: [Noi2014]起床困难综合症【贪心】
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 51 Nod 1007 正整数分组【类01背包】
- 从入门到精通之Boyer-Moore字符串搜索算法详解
- 线性表的顺序存储结构的实现及其应用(C/C++实现)
- IPython使用学习笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- input子系统剖析
- MySQL 主从架构原理
- 从后端到前端之Vue(六)表单组件 HTML5原生的表单和表单元素Vue组件的基础知识表单元素组件辅助工具开源
- OpenAI Gym 入门
- 常见编程模式之合并区间
- chmod 777 是开发的常规操作吗?
- 手把手教你进行Anaconda的安装
- 浅析Python基础知识之面向对象
- 手把手教你用Python进行SSH暴力破解
- 一文学会注解的正确使用姿势
- 面试官:请算出走迷宫需要的最少步数
- lua执行redis脚本找不到脚本的问题
- Android |《看完不忘系列》之dagger
- Android | dagger细枝篇
- ES UpdateByQuery Java Api