Linux 配置与管理 SWAP(虚拟内存)

打印 上一主题 下一主题

主题 852|帖子 852|积分 2556

以下以Linux系统为例说明配置swap(交换空间)的步骤、下令及作用:
一、作用


  • 缓解内存不足

    • 当系统的物理内存(RAM)不够用的时候,将一些不常用的内存数据临时存放到swap空间,从而为当前运行的程序腾出物理内存。比方,当同时运行多个大型应用程序,如数据库服务器、图形处理软件等,物理内存可能会被耗尽,swap空间就可以作为一种增补。

  • 休眠功能支持

    • 在支持休眠功能的系统中,系统会将当前的内存状态保存到swap分区,以便在唤醒时能够快速恢复到之前的状态。

二、创建交换文件(以创建一个2GB的交换文件为例)

1. 创建交换文件



  • 利用dd下令创建一个指定大小的文件。比方:
  1. sudo dd if=/dev/zero of=/root/swapfile bs=1M count=16384
复制代码


  • 这里的if=/dev/zero表示输入文件为/dev/zero(一个特殊的设备文件,用于提供无穷的空字符流),of=/root/swapfile表示输出文件为/swapfile(即将创建的交换文件),bs = 1M表示块大小为1兆字节,count = 2048表示统共创建16384个块,这样就创建了一个16GB(1M * 16384)的文件。

2. 设置文件权限



  • 交换文件须要设置合适的权限,一样平常设置为只有根用户(root)可读写:
  1. sudo chmod 600 /root/swapfile
复制代码


  • 数字600表示文件所有者(root)具有读写权限(6:读权限4 + 写权限2),而所属组和其他用户没有任何权限(0)。

2.1. 关于 sudo chmod 600 /root/swapfile
是否肯定要实行




  • 从安全性角度

    • 在创建交换文件(/swapfile)时,实行 sudo chmod 600 /swapfile 是一个精良的安全实践,但不是绝对必须实行的操纵。这个下令将交换文件的权限设置为只有文件所有者(通常是 root)具有读写权限,其他用户没有任何权限。这样做可以防止平凡用户对交换文件进行意外的修改或者读取其中可能包含的敏感信息(固然交换文件中的数据是内存数据交换过来的,但仍旧可能包含一些未加密的秘密信息)。

  • 从系统功能角度

    • 假如不实行这个下令,系统仍旧可以利用交换文件来进行内存交换操纵。交换文件的紧张功能是作为虚拟内存的一部分,由操纵系统内核来管理内存数据的交换,内核具有充足的权限来操纵交换文件,与交换文件的用户权限设置关系不大。

2.2. 关于其他用户启动是否没权限用到交换分区



  • 实际情况

    • 其他用户不须要直接对交换文件(/swapfile)有特定的权限来利用交换分区。交换分区(或交换文件)的利用是由操纵系统内核统一管理的。当系统内存不足时,内核会将内存中的数据交换到交换文件中,这个过程是内核级别的操纵,与平凡用户对交换文件的权限无关。平凡用户在运行程序时,不须要关心交换文件的权限,他们只须要操纵系统能够正常管理内存,包罗在须要时利用交换文件来扩展虚拟内存。

  • 举例说明

    • 假设在一个多用户的Linux系统中,有用户 user1 和 user2,假如交换文件 /swapfile 的权限被设置为 600,当 user1 和 user2 运行各自的程序时,如 user1 运行一个占用大量内存的文本编辑程序,user2 运行一个数据库客户端程序。假如系统内存不足,内核会自动将这两个用户程序中临时倒霉用的内存数据交换到 /swapfile 中,即使这两个用户对 /swapfile 没有直接的读写权限。

3. 将文件格式化为交换文件



  • 利用mkswap下令将文件格式化为交换文件格式:
  1. sudo mkswap /root/swapfile
复制代码


  • 这个下令会在/root/swapfile上创建交换文件系统。

4. 启用交换文件



  • 利用swapon下令启用交换文件:
  1. sudo swapon /root/swapfile
复制代码


  • 实行这个下令后,系统就开始利用/root/swapfile作为交换空间了。

5. (可选)设置开机自动挂载



  • 编辑/etc/fstab文件,添加以下一行:
  1. echo "/root/swapfile swap swap defaults 0 0" >> /etc/fstab
复制代码


  • 这样在系统启动时就会自动挂载交换文件。

6. 验证交换区

  1. free -g
复制代码

三、创建交换分区(假设已经有一个未分区的磁盘空间,比方/dev/sdb1)

1. 格式化分区为交换分区



  • 利用mkswap下令:
  1. sudo mkswap /dev/sdb1
复制代码


  • 这会将/dev/sdb1格式化为交换分区。
2. 启用交换分区



  • 利用swapon下令:
  1. sudo swapon /dev/sdb1
复制代码
3. (可选)设置开机自动挂载



  • 编辑/etc/fstab文件,添加以下一行:
  1. /dev/sdb1 none swap sw 0 0
复制代码
四、交换文件和交换分区的作用

(一)共同作用


  • 内存扩展

    • 当系统物理内存(RAM)资源紧张时,交换文件和交换分区都能提供额外的“虚拟内存”空间。比方,在一个同时运行多个应用程序(如浏览器打开多个标签页、办公软件、多媒体播放器等)的Linux系统中,假如物理内存即将耗尽,系统会将一些临时倒霉用的内存数据转移到交换空间(无论是交换文件还是交换分区),从而为正在运行的关键程序腾出物理内存,保证系统不会因为内存不足而瓦解。

  • 支持系统休眠功能

    • 在支持休眠功能的操纵系统中,交换文件或交换分区用于保存系统休眠前的内存状态。当系统从休眠状态恢复时,可以从交换空间中读取之前保存的内存数据,快速恢复到休眠前的运行状态。

(二)交换文件的特殊作用


  • 灵活性

    • 交换文件可以方便地创建、调解大小或删除,不须要对磁盘进行重新分区操纵。比方,在一个已经安装好操纵系统并且磁盘分区布局固定的服务器上,假如发现须要增加交换空间,可以直接创建一个交换文件,而不用担心粉碎现有的分区布局。这对于磁盘空间管理和系统配置的动态调解非常有用。

(三)交换分区的特殊作用


  • 性能优势(在某些情况下)

    • 交换分区在一些情况下可能具有更好的性能。因为它是一个独立的磁盘分区,磁盘I/O操纵可能会更高效。比方,在一些对磁盘I/O性能要求较高的服务器情况中,假如交换空间的利用较为频繁,利用专门的交换分区可能会减少磁盘寻道时间等开销,相比于交换文件可能会有肯定的性能提拔。

  • 传统兼容性

    • 在一些较老的操纵系统或者特定的系统安装和配置场景下,交换分区是一种传统的、被广泛支持的交换空间设置方式。比方,在一些嵌入式Linux系统或者基于传统BIOS的系统安装中,交换分区可能是默认或者更受保举的交换空间设置方式。

五、交换文件和交换分区的区别

(一)存储情势


  • 交换文件

    • 交换文件是一个平凡的文件,存储在现有的文件系统中。比方,在Linux系统中,可以创建在ext4、xfs等文件系统的目次下。它的大小可以像平凡文件一样进行灵活调解,只要所在的文件系统有充足的可用空间。

  • 交换分区

    • 交换分区是磁盘上一个独立的分区,在磁盘分区表中有专门的记载。它具有自己独立的分区格式(专门用于交换空间的格式),与文件系统分区(如ext4用于存储平凡文件和目次的分区)是分开的。

(二)创建和管理方式


  • 交换文件

    • 创建交换文件相对简单,只须要利用下令(如dd下令创建指定大小的文件,mkswap下令格式化文件为交换文件格式,swapon下令启用交换文件),不须要对磁盘进行重新分区操纵。调解大小也可以通过一些文件操纵下令来实现(固然可能须要一些额外的步骤,如先禁用交换文件,调解大小后再重新启用)。

  • 交换分区

    • 创建交换分区须要对磁盘进行分区操纵,这通常须要利用磁盘分区工具(如fdisk、parted等)。在分区创建后,再利用mkswap下令格式化分区为交换分区格式,末了用swapon下令启用。调解交换分区的大小相对复杂,可能须要重新分区、移动数据等操纵,并且有肯定的风险,假如操纵不当可能会导致数据丢失。

(三)空间管理


  • 交换文件

    • 交换文件的空间管理依赖于所在的文件系统。假如所在文件系统的可用空间不足,可能无法创建充足大的交换文件或者无法调解交换文件的大小。比方,假如/分区(假设交换文件创建在/分区下)只剩下1GB的可用空间,就无法创建一个2GB的交换文件。

  • 交换分区

    • 交换分区有自己独立的空间,不受其他文件系统分区的影响。只要磁盘有未分配的空间,就可以创建合适大小的交换分区,并且在创建后其空间是固定的(除非重新分区调解),不会受到其他分区文件操纵的影响。

六、删除交换文件的步骤:

(一)、关闭交换文件


  • 查看正在利用的交换文件或分区

    • 在Linux系统中,可以利用swapon -s

      下令查看当前正在利用的交换空间(包罗交换文件和交换分区)。比方:
    1. swapon -s
    复制代码
      

    • 该下令会输出类似如下的效果:
    1. Filename                Type        Size    Used    Priority
    2. /swapfile               file        2097148 0       -1
    复制代码
      

    • 这里显示了交换文件/swapfile的相关信息,如范例为file,大小为2097148(以KB为单位,这里是2GB)等。

  • 关闭交换文件

    • 假如要删除交换文件,起首须要利用swapoff下令关闭它。假设交换文件是/swapfile,实行以下下令:
    1. sudo swapoff /swapfile
    复制代码

(二)、删除交换文件


  • 删除文件本身

    • 在关闭交换文件后,可以利用rm下令删除交换文件。比方:
    1. sudo rm /swapfile
    复制代码
      

    • 这样就删除了交换文件。

(三)、(可选)从/etc/fstab中移除相关条目


  • 编辑/etc/fstab文件

    • 假如之前在/etc/fstab文件中添加了自动挂载交换文件的条目(比方/swapfile none swap sw 0 0),须要编辑/etc/fstab文件并删除该条目。可以利用文本编辑器(如vi或nano)来编辑。比方,利用nano编辑:
    1. sudo nano /etc/fstab
    复制代码
      

    • 在文件中找到并删除关于交换文件的那一行,然后保存并退出(在nano中按Ctrl + O保存,按Ctrl+X退出)。

七、交换文件可以清空,但须要遵循肯定的步骤:

(一)、关闭交换文件


  • 查看交换文件利用情况

    • 在Linux系统中,可以利用swapon -s

      下令查看当前正在利用的交换空间(包罗交换文件)。比方:
    1. swapon -s
    复制代码
      

    • 这会显示类似如下的效果(假如存在交换文件的话):
    1. Filename                Type        Size    Used    Priority
    2. /swapfile               file        2097148 102400   -1
    复制代码
      

    • 这里展示了交换文件的名称(/swapfile)、范例(file)、大小(以KB为单位,这里是2GB)、已利用的空间(102400KB)等信息。

  • 关闭交换文件

    • 利用swapoff下令关闭交换文件。假设交换文件为/swapfile,实行以下下令:
    1. sudo swapoff /swapfile
    复制代码

(二)、清空交换文件内容


  • 覆盖交换文件内容

    • 一种方法是利用dd下令将交换文件内容覆盖为零。比方:
    1. sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
    复制代码
      

    • 这里的if=/dev/zero表示输入为全零的设备文件,of=/swapfile表示输出到交换文件,bs = 1M是块大小为1兆字节,count = 2048表示统共2048个块(假设交换文件大小为2GB)。这样就将交换文件的内容清空了。

(三)、重新启用交换文件(可选)


  • 重新格式化交换文件(假如须要)

    • 在某些情况下,可能须要重新格式化交换文件。可以利用mkswap下令:
    1. sudo mkswap /swapfile
    复制代码

  • 重新启用交换文件

    • 利用swapon下令重新启用交换文件:
    1. sudo swapon /swapfile
    复制代码

须要注意的是,在清空交换文件之前,确保系统有充足的物理内存来处理正在运行的程序,因为清空交换文件可能会导致系统在重新启用交换文件之前,可利用的虚拟内存减少。
八、 是否设置swap


  • 须要设置swap的情况

    • 内存有限的系统

      • 对于物理内存较小的系统,如早期的嵌入式设备或者一些配置较低的服务器(比方只有1 - 2GB物理内存),设置swap是很有须要的。比方,在运行一些根本的服务器应用程序(如轻量级的Web服务器、DNS服务器等)时,可能会偶尔碰到内存压力,swap可以提供额外的虚拟内存来防止系统因内存不足而瓦解。

    • 运行多种应用的系统

      • 假如系统须要同时运行多种不同范例的应用程序,尤其是当这些应用程序的内存利用模式难以精确预测时。比方,在一个同时运行办公软件、数据库客户端和一些背景监控程序的桌面系统中,不同应用程序的内存需求可能会在不同时间达到峰值。swap可以在物理内存紧张时作为缓冲,确保系统的稳固运行。

    • 支持休眠功能的系统

      • 对于须要支持休眠功能的桌面系统或条记本电脑,swap分区是必需的。在系统休眠时,内存中的数据会被保存到swap分区中,当系统唤醒时再从swap分区恢复到内存。比方,在Windows系统中,休眠功能依赖于类似swap分区(页面文件)的机制,在Linux系统中同样须要swap分区来实现休眠功能。




  • 可以不设置swap的情况

    • 内存充足且可预测的系统

      • 在拥有大容量物理内存(如数十GB甚至数百GB)并且应用程序的内存利用模式非常稳固、可预测的系统中,可以思量不设置swap。比方,在一些专门用于内存数据库(如Redis集群,并且为其分配了充足的物理内存)的服务器中,由于Redis会尽量利用内存来提高性能,并且内存分配是可精确控制的,假如系统有充足的冗余内存,不设置swap可以避免因磁盘I/O带来的性能丧失。

    • 对性能要求极高的内存麋集型系统

      • 对于一些对性能要求极高的内存麋集型应用场景,如高性能计算(HPC)集群中的计算节点,这些节点紧张用于运行大规模的数值模拟、基因测序等计算任务,须要尽可能减少磁盘I/O对计算性能的影响。假如系统已经配备了充足的物理内存来满足任务需求,不设置swap可以提高系统的团体性能。



  • 设置swap大小及配置规则

    • 根据物理内存大小确定

      • 小容量物理内存(1 - 4GB)

        • 假如物理内存较小,如1 - 4GB,可以按照传统的1.5 - 2倍物理内存来设置swap大小。比方,对于2GB物理内存的系统,可以设置3 - 4GB的swap。这样可以在内存不足时提供相对充足的虚拟内存支持,确保系统能够正常运行一些根本的应用程序。

      • 中等容量物理内存(4 - 16GB)

        • 对于4 - 16GB物理内存的系统,可以设置1 - 1.5倍物理内存大小的swap。比方,对于8GB物理内存的系统,可以设置8 - 12GB的swap。在这种情况下,系统有肯定的物理内存基础,不须要过大的swap来增补,但仍旧须要肯定的虚拟内存来应对偶尔的内存压力。

      • 大容量物理内存(16GB以上)

        • 当物理内存达到16GB或更多时,可以根据系统的详细需求灵活设置swap大小。假如系统运行的应用程序内存利用相对稳固,可能只须要设置较小的swap,如4 - 8GB,甚至可以更小。但假如系统运行多种复杂的应用程序或者须要支持休眠功能等,可能须要设置相对较大的swap,如8 - 16GB。


    • 根据应用程序需求确定

      • 内存需求波动大的应用

        • 假如系统运行的应用程序内存需求波动较大,如视频编辑软件(在导入、编辑和渲染不同阶段内存需求差异很大)或者一些企业级的ERP系统(在不同业务流程操纵时内存需求变革明显),须要设置相对较大的swap。比方,对于运行视频编辑软件的系统,即使有8GB物理内存,可能也须要设置8 - 12GB的swap来应对渲染等内存需求高峰阶段。

      • 内存需求稳固的应用

        • 对于内存需求非常稳固的应用程序,如一些简单的网络监控工具或者静态Web服务器,在有充足物理内存的情况下,可以设置较小的swap。比方,对于运行简单网络监控工具的系统,即使有4GB物理内存,可能只须要设置1 - 2GB的swap。



是否设置swap以及设置多大的swap须要综合思量系统的物理内存大小、应用程序的内存利用特性、系统功能需求(如休眠)等多方面因素。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表