我需要添加额外的 swap 空间以提升我的 Linux 服务器/桌面系统的性能。我该如何在不创建一个新的分区的前提下只使用命令行就添加一个 swap 文件到 Linux 系统中去呢?
在 Linux 中,亦如在大多数其它的类 Unix 操作系统中,通常都使用一块磁盘的一整块分区来作为交换区域。但对于 2.6 Linux Kernel 交换文件能够和交换分区一样快 - 尽管我还是建议去使用一个交换分区。对于交换文件的管理的灵活性要高于分区管理的灵活性;况且现代大容量硬盘可以进行物理扇区的重新映射,分区的连续性是无法保证的。你可以将交换文件作为一个专用分区进行添加,或者也可以使用下文的指令来创建一个交换文件。

在 Linux 下添加一个交换文件的步骤

你需要使用 dd 命令来创建一个交换文件。 mkswap 命令用于在一个设备或文件上建立一个 Linux 交换区域。

步骤 #1:以 root 用户登录

打开一个终端窗口 (Applications > Accessories > Terminal) 或者使用 ssh 客户端登录到远程服务器。键入 su - (或 sudo -s) 命令并按提示输入 root 密码:
$ su -

$ sudo -s

步骤 #2:创建存储文件

键入以下命令来创建 512MB 的交换文件 (1024 * 512MB = 524288 块大小):
# dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
输入如下:
524288+0 records in
524288+0 records out
536870912 bytes (537 MB) copied, 3.23347 s, 166 MB/s
备注,

  1. if=/dev/zero:从 /dev/zero 文件中读。/dev/zero 是一个特殊的文件,它提供了很多 null 字符用以建立一个名为 /swapfile1 的存储文件。
  2. of=/swapfile1:将从 /dev/zero 中读的 null 字符写存储文件到 /swapfile1。
  3. bs=1024:每次读或写 1024 个字节。
  4. count=524288:只拷贝 524288 个输入块。

步骤 #3:交换文件的安全处理

出于安全的原因,为交换文件设置合适的文件权限:
# chown root:root /swapfile1
# chmod 0600 /swapfile1
一个人人可读的交换文件将是一个巨大的本地漏洞。以上命令保证了只有 root 用户能够对该文件进行读写。

步骤 #4:设置一个 Linux 交换区域

输入以下命令在一个文件中设置 Linux 交换区:
# mkswap /swapfile1
输出如下:
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=0e5e7c60-bbba-4089-a76c-2bb29c0f0839

步骤 #5:启用交换文件

最后,立即激活 /swapfile1 交换区域,键入:
# swapon /swapfile1

步骤 #6:修改 /etc/fstab 文件

要在 Linux 系统重启后激活 /swapfile1,添加条目到 /etc/fstab 文件。使用诸如 vi 的文本编辑器打开这个文件:
# vi /etc/fstab
追加一行:
/swapfile1 none swap sw 0 0
保持并关闭该文件。下一次 Linux 重启以后,就会自动启用这个新的交换文件了。

如何检查交换区域是否已经激活?

只需要键入 free 命令:
$ free -m
             total       used       free     shared    buffers     cached
Mem:          1876       1798         77          0        119       1440
-/+ buffers/cache:        237       1638
Swap:         4607          0       4607

如何显示 Linux 上交换区的使用摘要?

键入以下 swapon 命令:
# swapon -s
输出如下:
Filename Type Size Used Priority
/dev/sda6                               partition 4194296 0 0
/swapfile1                              file 524280 0 -1
或者也可以查看 /proc/meminfo 文件:
$ less /proc/meminfo
$ grep -i --color swap /proc/meminfo
输出如下:
SwapCached:        30748 kB
SwapTotal:       6291448 kB
SwapFree:        6154008 kB
还有一个办法就是使用 top、 atop、 htop 等命令来显示交换区域的使用情况:
# top
# atop
# htop
一个运行了一个数据库服务器的 CentOS Linux 输出如下:
  1  [||                        3.9%]     Tasks: 171, 106 thr; 1 running
  2  [                          0.0%]     Load average: 0.06 0.12 0.09 
  3  [||                        2.0%]     Uptime: 22 days, 07:07:28
  4  [                          0.0%]
  5  [                          0.0%]
  6  [                          0.0%]
  7  [                          0.0%]
  8  [                          0.0%]
  Mem[||||||||||||||||||2112/11909MB]
  Swp[|                   134/6143MB]

PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 8523 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:00.00 /usr/libexec/mysq
 8524 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:02.74 /usr/libexec/mysq
 8525 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:16.17 /usr/libexec/mysq
 8526 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:06.33 /usr/libexec/mysq
 8528 mysql      20   0 4545M  414M  4816 S  0.0  3.5  4:02.14 /usr/libexec/mysq
 8529 mysql      20   0 4545M  414M  4816 S  0.0  3.5  5:22.00 /usr/libexec/mysq
 8530 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:04.63 /usr/libexec/mysq
 8531 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:50.95 /usr/libexec/mysq
 8532 mysql      20   0 4545M  414M  4816 S  0.0  3.5  0:08.10 /usr/libexec/mysq
 9359 mysql      20   0 4545M  414M  4816 S  0.0  3.5 22:53.28 /usr/libexec/mysq

我该如何关闭 Linux 上用于 page 分页以及交换区域的设备和文件?

你需要使用 swapoff 命令:
# swapoff /swapfile1
# swapon -s

我该如何设置 Linux 服务器上的 swappiness?

语法:
# sysctl vm.swappiness=VALUE
# sysctl vm.swappiness=20
或者
# echo VALUE > /proc/sys/vm/swappiness
# echo 30 > /proc/sys/vm/swappiness
/proc/sys/vm/swappiness 文件里的值控制着 Kernel 使用交换内存页的积极程度。值越高表示使用交换区域的积极程度越高,越低表示使用交换区域的积极程度越低也就是更大程度地去使用物理内存。默认值为 60。 swappiness 的值在重启后会恢复默认值 60,要永久性地修改,添加以下行到 /etc/sysctl.conf:
echo 'vm.swappiness=30' >> /etc/sysctl.conf
原文链接: Linux Add a Swap File – HowTo,发布日期:2006 年 5 月 18 日,最新修订日期:2017 年 5 月 3 日。

作者简介

Vivek Gite
Vivek Gite 是 nixCraft 的创始人、资深系统管理员、Linux/Unix shell 脚本编程培训师。他曾与来自全球的客户进行合作,涉猎多个领域,包括 IT、教育、国防与空间探索以及非盈利组织。

译者续:《给 aws 添加 8G 内存的操作步骤》

以下内容为译者在一台没有启用交换区的 aws 亲自动手操作,以示上述内容"亲测可用"。
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
22 package(s) needed for security, out of 29 available
Run "sudo yum update" to apply all updates.
$ uname -a
Linux PUBLISHER-02 4.4.23-31.54.amzn1.x86_64 #1 SMP 
Tue Oct 18 22:02:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ whoami
defonds
$ free -m
             total       used       free     shared    buffers     cached
Mem:          7985       1885       6099         10        266       1285
-/+ buffers/cache:        334       7650
Swap:            0          0          0
$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
$ sudo -s
[sudo] password for defonds:
# whoami
root
# cat /proc/cpuinfo | grep "processor" | wc -l
2
# cd /
# dir
bin     data  home   local       media  proc  sbin     sys  var
boot    dev   lib    lost+found  mnt    root  selinux  tmp
cgroup  etc   lib64  McAfee      opt    run   srv      usr
# dd if=/dev/zero of=/swapfile1 bs=1024 count=8388608
8388608+0 records in
8388608+0 records out
8589934592 bytes (8.6 GB) copied, 56.5998 s, 152 MB/s
# ls -alt
total 8388744
drwxrwxrwt   5 root root       4096 Jul 28 01:56 tmp
-rw-r--r--   1 root root 8589934592 Jul 28 01:56 swapfile1
# chown root:root /swapfile1
# ls -alt
total 8388744
drwxrwxrwt   5 root root       4096 Jul 28 01:56 tmp
-rw-r--r--   1 root root 8589934592 Jul 28 01:56 swapfile1
# chmod 0600 /swapfile1
# ls -alt
total 8388744
drwxrwxrwt   5 root root       4096 Jul 28 01:56 tmp
-rw-------   1 root root 8589934592 Jul 28 01:56 swapfile1
# mkswap /swapfile1
Setting up swapspace version 1, size = 8388604 KiB
no label, UUID=6624386f-338b-4748-a13d-08ff5896323a
# swapon /swapfile1
# vi /etc/fstab
# cat /etc/fstab
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/dev/xvdb  /data        ext4    defaults        0   0
/swapfile1 none swap sw 0 0
# free -m
             total       used       free     shared    buffers     cached
Mem:          7985       7860        124         10        267       7066
-/+ buffers/cache:        526       7458
Swap:         8191          0       8191
# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/swapfile1                              file            8388604 0       -1
# top -1
Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie
Cpu0  :  7.9%us,  0.4%sy,  0.0%ni, 91.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  8.0%us,  0.9%sy,  0.0%ni, 91.0%id,  0.1%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8176772k total,  8048280k used,   128492k free,   273968k buffers
Swap:  8388604k total,        0k used,  8388604k free,  5906156k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
  543 root      20   0 50.0g 1.8g 517m S  1.0 23.0   2:26.99 java                  
  1 root      20   0 19640 1996 1672 S  0.0  0.0   0:00.92 init                   
  2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd               
  3 root      20   0     0    0    0 S  0.0  0.0   0:04.98 ksoftirqd/0            
  5 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0H           
  7 root      20   0     0    0    0 S  0.0  0.0   0:16.45 rcu_sched              
  8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcu_bh                 
  9 root      RT   0     0    0    0 S  0.0  0.0   0:00.16 migration/0           
  10 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 lru-add-drain         
  11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuhp/0               
  12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cpuhp/1               
  13 root      RT   0     0    0    0 S  0.0  0.0   0:00.35 migration/1           
  14 root      20   0     0    0    0 S  0.0  0.0   0:18.57 ksoftirqd/1           
  16 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kworker/1:0H          
  17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs             
  18 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns                 
  24 root      20   0     0    0    0 S  0.0  0.0   0:00.00 xenwatch  
以上操作对物理内存为 8G 的 Linux 加了 8G 的虚拟空间,立即生效并保证 Linux 重启后也有效。

Linux 如何添加一个 Swap 文件相关推荐

  1. 管理员技术(六): 硬盘分区及格式化、 新建一个逻辑卷、调整现有磁盘的分区、扩展逻辑卷的大小、添加一个swap分区...

    一.硬盘分区及格式化 问题: 本例要求熟悉硬盘分区结构,使用fdisk分区工具在磁盘 /dev/vdb 上按以下要求建立分区: 1> 采用默认的 msdos 分区模式         2> ...

  2. linux强制移除pdf密码,分享|如何在 Linux 中从一个 PDF 文件中移除密码

    今天,我碰巧分享一个受密码保护的 PDF 文件给我的一个朋友.我知道这个 PDF 文件的密码,但是我不想透露密码.作为代替,我只想移除密码并发送文件给他.我开始在因特网上查找一些简单的方法来从 PDF ...

  3. Linux如何让一个.sh文件可双击执行 并设置桌面启动图标

    Linux如何让一个.sh文件可双击执行并设置桌面启动图标 linux下怎么设置一个.sh文件可执行 参考资料: https://blog.csdn.net/ahelloyou/article/det ...

  4. 获取js里添加的css文件,用JS添加一个css文件

    我在这里发现了一些关于我的问题的问题,但我无法使用它. 通过JS点击它们时我会改变的CSS属性,JQuery的用JS添加一个css文件 Green Red /*$(document).ready(fu ...

  5. 向oracle表空间添加一个数据文件命令

    向表空间添加一个数据文件SQL语句: ALTER TABLESPACE sde ADD DATAFILE'D:\app\Administrator\oradata\orcl\sde1' SIZE 40 ...

  6. linux中添加一个用户到指定用户组的两种方式,修改一个用户到指定用户组的一种方式...

    添加一个用户到指定用户组: gpasswd –a 用户名 组名 usermod –G 组名 用户名 //第一种:gpasswd –a 用户名 组名 [root@localhost ~]# id use ...

  7. Linux下添加eigen头文件,移植Eigen库到SylixOS下及使用方法

    1. 开发环境 宿主机:Windows 7 集成开发环境:Real-Evo IDE 3.5.3 虚拟机:Ubuntu 目标机:x86 2. Eigen简介 Eigen是一个提供了线性代数.矩阵.向量操 ...

  8. linux每天生成一个日志文件,使Apache每天产生一个日志文件

    Linux:使Apache每天产生一个日志文件,解决apache日志文件过大的问题. 方法: 用rotatelogs实现apache日志按日期存放. 操作步骤: 一.在apache的配置文件中找到 E ...

  9. linux下 添加一个新账户tom,linux 账户管理命令 useradd、groupadd使用方法

    内容提要: 1. 掌握用户的 增/删/改 命令 2. 掌握组的 增/删/改 命令 组管理 1)groupadd groupadd 用于添加组账号.格式如下:groupadd [-g gid] grou ...

最新文章

  1. PHP对URL进行字符串编码
  2. COCI CONTEST #3 29.11.2014 KAMIONI
  3. bzoj3190 [JLOI2013]赛车 半平面交
  4. linux打包/解压-tar
  5. ios 怎么禁止点击子视图的时候不响应父视图的点击事件
  6. 百度SDN实践与思考
  7. DirectX 9.0 SDK安装
  8. vfp报表纸张设置_vfp教程之Visual Foxpro生成任意打印字段报表的实现
  9. java规则引擎Drools实战
  10. 计量经济学及Stata应用 陈强 第八章自相关习题8.3
  11. 智方8000系进销存管理系统 杀毒软件下载
  12. 在ABBYY FineReader中制作屏幕截图和识别文本
  13. View的测量宽高和最终宽高有什么区别?
  14. 爬虫-3-requests和代理
  15. CSS:CSS的外联样式
  16. git aliases
  17. ACM里的期望和概率问题 从入门到精(入)通(土)
  18. android5.1 淘汰,大S被淘汰! 上1:5油短卡LOSI 5T开箱
  19. vscode远程连接服务器方法
  20. w7打开计算机无删除键,Win7右键菜单无用的打开方式选项怎么删除?

热门文章

  1. Octotree 下载安装
  2. 什么是价值投资?(Value Investing)
  3. numpy.floor()函数的使用
  4. Errors报错记录
  5. MacOS 10.15降级MacOS 10.14
  6. android 代码添加账户,Android应用程式在addAccountExplicitly(帐户,密码,null)上崩溃;
  7. Python绘制折线图、散点图
  8. 01-什么是架构、架构的目的
  9. linux samba 服务端口号,Linux系统学习 二十、SAMBA服务—介绍、安装、端口
  10. 【西欧经济史第二版】【4】第一章 导言