首页 > 系统相关 >《Linux从小白到高手》综合应用篇:深入详解Linux swap及其调整优化

《Linux从小白到高手》综合应用篇:深入详解Linux swap及其调整优化

时间:2024-11-14 14:43:41浏览次数:3  
标签:文件 白到 系统 分区 内存 Swap Linux swap

1. 引言:

Swap是存储设备上的一块空间(分区),操作系统可以在这里暂存一些内存里放不下的东西。这从某种程度上相当于增加了服务器的可用内存。虽然从swap读写比内存慢,但总比没有好,算是内存不足时一种比较不错的解决方案。如果没有swap,则服务器一旦内存不足,就会开始终止应用以释放内存,甚至会崩溃,这会让你丢失一些还没来得及保存的数据,或者造成宕机。有些应用明确要求系统配置swap以确保数据访问的可靠性。比如说ORACLE数据库。

2. 什么是swap

2.1 Linux对于swap的定义

在 Linux 系统中,Swap(交换空间)是一种磁盘空间,它被用作计算机物理内存(RAM)的补充。当系统的物理内存不够用的时候,内核会将内存中暂时不用的数据块交换到磁盘上的 Swap 空间中,为当前正在运行的程序腾出足够的物理内存,等到需要这些数据时,再将它们从 Swap 空间读回到内存。

2.2 工作原理

基于分页(paging)机制。内存和磁盘上的 Swap 空间都被划分成固定大小的页面(通常是 4KB)。当物理内存不足时,Linux 内核中的内存管理子系统(MMU - Memory Management Unit)会选择一些内存页面,将它们复制到磁盘上的 Swap 区域,同时更新内存页面表(page table),以反映这些页面已经被换出。
例如,假设有一个正在运行的大型数据库应用程序,它占用了大量的内存。当系统同时启动了其他内存密集型程序(如视频编辑软件)时,物理内存可能会不够用。此时,内核会将数据库应用程序中暂时不使用的部分数据页面(比如缓存的数据)交换到 Swap 空间,让视频编辑软件能够获得足够的物理内存来正常运行。

2.3 swap的主要作用

应对内存峰值:对于一些偶尔会出现内存使用高峰的系统,比如 Web 服务器在遭受流量高峰冲击时,Swap 空间可以防止系统因为内存不足而崩溃。即使物理内存已经耗尽,系统仍然可以借助 Swap 空间来维持基本的运行,避免进程被强制终止。
支持大内存需求的程序:一些大型的专业软件(如 3D 建模软件、科学计算软件)可能需要大量的内存来加载数据和执行复杂的运算。当物理内存无法满足其全部需求时,Swap 空间可以作为一种辅助手段,使得这些程序能够在内存受限的系统上运行。

2.4 配置和管理

  1. 创建 Swap 分区或文件:可以在安装 Linux 系统时创建 Swap 分区,也可以在系统安装后通过命令行工具创建 Swap 文件。例如,使用dd命令创建一个指定大小的文件,再通过mkswap命令将其格式化为 Swap 文件,最后使用swapon命令启用它。
  2. 调整大小:根据系统的实际需求,可以调整 Swap 空间的大小。如果系统经常因为内存不足而大量使用 Swap 空间,可能需要增加 Swap 大小;反之,如果 Swap 空间很少被使用,可以适当减小它,以节省磁盘空间。后续会详细介绍调整swap分区。
  3. 监控使用情况:可以使用工具如free -m/free -h命令来查看内存和 Swap 空间的使用情况。free -m会以兆字节(MB)为单位显示系统的内存(包括物理内存和 Swap 空间)总量、已使用量、空闲量等信息。例如,输出结果可能如下:
    在这里插入图片描述

3. 调整swap分区的大小

3.1 在有未分配磁盘空间的情况下扩展 Swap 分区(针对基于分区的 Swap)

  1. 步骤一:检查磁盘空间和分区情况
    使用fdisk -l命令来查看磁盘分区信息,包括磁盘大小、分区类型和大小等。例如,输出可能会显示出磁盘/dev/sda有多个分区,其中一个是 Swap 分区/dev/sdaX(X 为具体分区号),并且可以看到磁盘上是否还有未分配的空间:
  2. 步骤二:卸载 Swap 分区
    在调整大小之前,需要先卸载 Swap 分区。使用swapoff命令,例如,如果 Swap 分区是/dev/sda3,则命令为swapoff /dev/sda3。这一步很重要,因为正在使用的分区是无法进行大小调整的。
  3. 步骤三:使用分区工具调整大小
    可以使用fdisk或parted工具来调整分区大小。
    –使用 fdisk 调整:
    启动fdisk工具,如fdisk /dev/sda,进入交互式界面。
    按d键删除原来的 Swap 分区(这里只是删除分区信息,数据还在磁盘上),记录下分区的起始和结束扇区信息。
    按n键创建新的分区,选择分区类型为Linux swap,并根据需要设置起始和结束扇区来扩大分区大小,确保新分区的大小符合要求。
    按w键保存并退出fdisk。
    –使用 parted 调整:
    启动parted工具,如parted /dev/sda。
    输入print命令查看分区信息。
    输入resizepart命令,然后指定要调整的 Swap 分区编号,按照提示输入新的分区大小(可以使用百分比或具体的大小单位,如 GB、MB 等)。
    退出parted工具。
  4. 步骤四:重新格式化和启用 Swap 分区
    分区调整完成后,需要重新格式化新的分区为 Swap 格式。使用mkswap命令,如mkswap /dev/sdaX(X 为调整后的 Swap 分区号)。
  5. 最后,使用swapon命令启用新的 Swap 分区,如swapon /dev/sdaX。

3.2 通过添加 Swap 文件来增加 Swap 空间(适用于基于文件的 Swap)

  1. 步骤一:创建新的 Swap 文件
    选择一个有足够磁盘空间的位置,例如在/var目录下。使用dd命令创建一个新的文件,如要创建一个大小为 2GB(2048MB)的 Swap 文件,可以使用命令dd if = /dev/zero of = /var/new_swap_file bs = 1M count = 2048。这里if表示输入文件(/dev/zero提供无限的空字节流),of表示输出文件(新的 Swap 文件路径),bs是块大小,count是块的数量。
  2. 步骤二:设置文件权限和格式化
    设置文件权限,使用chmod命令,如chmod 600 /var/new_swap_file,这是为了确保只有 root 用户可以访问该文件。
    然后使用mkswap命令格式化文件为 Swap 格式,如mkswap /var/new_swap_file。
  3. 步骤三:启用新的 Swap 文件
    使用swapon命令启用新的 Swap 文件,如swapon /var/new_swap_file。
    若要在开机时自动启用这个新的 Swap 文件,可以编辑/etc/fstab文件,添加一行:
/var/new_swap_file swap swap defaults 0 0

3.3 减小 Swap 分区或文件大小(有一定风险,可能导致数据丢失)

  1. 基于分区的 Swap 减小:
    基本步骤与扩展类似,但在使用分区工具(如fdisk或parted)时,是减小分区的大小,并且需要格外小心,因为减小分区大小可能会导致数据丢失。在删除原来的 Swap 分区并创建新的较小分区后,同样要重新格式化(mkswap)和启用(swapon)。
  2. 基于文件的 Swap 减小:
    这相对复杂一些,没有直接减小文件大小的简单方法。一种可能的做法是先创建一个新的较小的 Swap 文件,启用它,然后将数据从原来较大的 Swap 文件迁移到新文件(这可能需要一些复杂的脚本或工具来实现),最后删除原来的大文件。这种操作也有数据丢失的风险,并且在操作过程中要确保系统有足够的内存和 Swap 空间来维持正常运行。

4. swap分区大小设置和物理内存的关系

4.1 基本原则

一般来说,在 Linux 系统中,Swap 分区大小的设置与物理内存大小有关。传统的经验法则是,Swap 分区大小应该是物理内存大小的 1 - 2 倍。例如,如果系统的物理内存是 4GB,那么 Swap 分区可以设置为 4GB - 8GB。这种设置可以为系统在内存使用高峰时期提供足够的 “缓冲” 空间。

4.2 不同物理内存大小下的考虑

  1. 小内存系统(小于 4GB 物理内存)
    对于物理内存较小的系统,如 2GB 或更少,相对较大的 Swap 分区可能更有帮助。可以考虑将 Swap 分区设置为物理内存的 2 倍左右。这是因为小内存系统更容易出现内存不足的情况,较大的 Swap 分区可以在内存紧张时,让更多的进程有地方 “暂存”,避免系统因内存耗尽而频繁崩溃。例如,对于一个具有 1GB 物理内存的系统,设置 2GB 的 Swap 分区可以在一定程度上缓解内存压力。
  2. 中等内存系统(4GB - 16GB 物理内存)
    当物理内存在这个范围内时,Swap 分区大小可以设置为与物理内存相当或略大一些。例如,对于一个 8GB 物理内存的系统,设置 8GB - 12GB 的 Swap 分区是比较合理的。这样的设置可以在系统遇到突发的内存需求增长(如同时打开多个大型应用程序)时,提供一定的补充空间,同时不会因为 Swap 分区过大而占用过多的磁盘空间。
  3. 大内存系统(大于 16GB 物理内存)
    对于具有大量物理内存的系统,如 32GB 或更多,Swap 分区的大小可以相对小一些。可以将 Swap 分区设置为物理内存的 0.5 - 1 倍。这是因为大内存系统通常运行内存密集型的大型应用程序,这些程序对内存的需求很高,但在正常运行时,物理内存足以应对大部分情况。不过,即使是大内存系统,设置一定大小的 Swap 分区仍然是有必要的,主要用于处理一些特殊情况,如程序的内存泄漏或者系统启动时加载大量程序导致的瞬间内存高峰。
  4. 特殊用途系统的考虑
    a. 服务器系统
    对于服务器,特别是 Web 服务器、数据库服务器等,Swap 分区的设置要根据服务器的具体用途来确定。如果服务器主要运行的是内存密集型的应用程序(如大型数据库管理系统),并且希望在内存紧张时系统仍能维持基本的服务,那么可以适当增大 Swap 分区。同时,要考虑到服务器磁盘 I/O 性能对 Swap 操作的影响。如果服务器的磁盘 I/O 速度较慢,过大的 Swap 分区可能会导致系统性能下降,因为频繁的 Swap 操作会增加磁盘 I/O 负载。
    b. 桌面系统
    在桌面系统中,用户可能会同时运行多个应用程序,包括办公软件、浏览器、多媒体软件等。根据用户的使用习惯和物理内存大小来设置 Swap 分区。如果用户经常同时运行多个大型应用程序,如视频编辑软件和 3D 游戏,那么需要设置一个足够大的 Swap 分区来应对可能出现的内存不足情况。
    4.个人经验
    结合本人多年的工作经验,对swap大小设置建议如下表所示:
    在这里插入图片描述

5. swap拓展1:可以把 Swap 空间设置到内存盘吗?

可以把 Swap 空间设置到内存盘,但这种做法有利有弊,并且需要根据具体的使用场景和需求来谨慎考虑。

5.1 优点:

  1. 快速读写:内存盘的读写速度比传统机械硬盘甚至固态硬盘都要快得多。把 Swap 空间设置到内存盘上,可以大大提高 Swap 空间的读写性能,减少因 Swap 操作导致的系统延迟,在一定程度上能够提升系统的整体运行速度。例如,对于一些对内存需求较大且对性能要求较高的应用程序,将 Swap 空间设置到内存盘可以减少因内存不足而进行 Swap 操作时的性能损失。
  2. 灵活配置:内存盘是基于内存创建的虚拟磁盘,可以根据需要灵活地调整大小和设置参数,方便用户根据系统的实际情况来配置 Swap 空间。

5.2 缺点:

  1. 内存占用:内存盘本身会占用一部分物理内存,而把 Swap 空间设置到内存盘上又会进一步占用内存资源。如果系统的物理内存本来就比较紧张,这种做法可能会导致可用物理内存更少,反而会影响系统的性能。
  2. 数据易失:内存盘的数据是存储在内存中的,一旦系统断电或重启,内存盘中的数据将会丢失。如果 Swap 空间中的数据没有及时回写到物理磁盘上,可能会导致数据丢失或损坏,影响系统的稳定性和数据的安全性。
    总之,如果系统有足够的物理内存,并且对性能要求较高,可以考虑将 Swap 空间设置到内存盘上,但需要注意做好数据备份和系统管理工作;如果系统的物理内存有限,或者对数据的安全性和稳定性要求较高,那么不建议将 Swap 空间设置到内存盘上。

6. swap拓展2:如何在 Linux 系统中将 Swap 空间设置到内存盘?

  1. 创建内存盘
    使用 mount 命令结合 tmpfs 文件系统来创建内存盘。例如,创建一个大小为 1GB 的内存盘并挂载到 /mnt/memdisk 目录下,可以执行以下命令:
sudo mkdir /mnt/memdisk
sudo mount -t tmpfs -o size=1G tmpfs /mnt/memdisk

上述命令中,-t tmpfs 指定文件系统类型为 tmpfs,-o size=1G 表示设置内存盘的大小为 1GB,tmpfs 是要挂载的文件系统名称,/mnt/memdisk 是挂载点。

  1. 创建 Swap 文件

在创建好的内存盘目录下,使用 dd 命令创建一个 Swap 文件。例如,创建一个 2GB 大小的 Swap 文件 /mnt/memdisk/swapfile,可以执行以下命令:
sudo dd if=/dev/zero of=/mnt/memdisk/swapfile bs=1M count=2048
此命令中,if=/dev/zero 表示从 /dev/zero 这个虚拟设备读取数据,of=/mnt/memdisk/swapfile 指定输出文件为 /mnt/memdisk/swapfile,bs=1M 表示每个数据块的大小为 1MB,count=2048 表示数据块的数量为 2048 个,这样总的文件大小就是 2048MB(即 2GB)。

  1. 设置 Swap 文件权限
    为了确保安全,需要设置 Swap 文件的权限,只允许 root 用户访问。执行以下命令:
    sudo chmod 600 /mnt/memdisk/swapfile

  2. 格式化 Swap 文件
    使用 mkswap 命令将创建的文件格式化为 Swap 空间:
    sudo mkswap /mnt/memdisk/swapfile

  3. 启用 Swap 文件
    使用 swapon 命令启用 Swap 文件:
    sudo swapon /mnt/memdisk/swapfile

  4. 设置开机自动挂载
    为了使 Swap 文件在系统重启后仍然有效,需要将其添加到 /etc/fstab 文件中。在文件末尾添加以下行:
    /mnt/memdisk/swapfile swap swap defaults 0 0
    完成以上步骤后,Swap 空间就成功设置到了内存盘上。
    **注意事项:**将 Swap 空间设置到内存盘可以提高性能,但由于内存盘的数据在系统重启后会丢失,所以这种设置方式可能不适合需要持久保存 Swap 数据的场景。

本篇完结

码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

标签:文件,白到,系统,分区,内存,Swap,Linux,swap
From: https://blog.csdn.net/qq_45732829/article/details/143641940

相关文章

  • linux系统文件打开数
    查看总的文件打开数lsof查看占用文件打开数最多的10个进制lsof|awk'{print$2}'|sort|uniq-c|sort-nr|head-n10#lsof|awk'{print$2}'|sort|uniq-c|sort-nr|head-n1031171104281139810061076110053836100435002144......
  • linux系统so动态库的搜索路径
    so动态库的搜索路径搜索的先后顺序编译目标代码时指定的动态库搜索路径环境变量LD_LIBRARY_PATH指定的动态库搜索路径配置文件/etc/ld.so.conf中指定的动态库搜索路径默认的动态库搜索路径/lib默认的动态库搜索路径/usr/libgcc编译指定动态库搜索路径-Wl,-rpath=<动态库......
  • Linux 服务器迁移步骤
    LearnhowtomigrateyourLinuxVPSfromanoldservertoanewonewiththisstep-by-stepguide.Discoveressentialtechniques,tools,andbestpracticesforasmoothservermigration.WhenitcomestomigratingyourVPS,therearenumerousapproachesav......
  • linux下安装docker
    ****************docker****************docker是一个快速构建、运行、管理应用的工具。****************镜像和容器****************当我们利用docker安装应用时,docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。do......
  • Linux平台Oracle开机自启动设置
    网上和官方文档已经有不少介绍如何设置开机启动Oracle实例的文章(Linux平台),不过以sysvinit和service这种方式居多。最近遇到了UAT环境的服务器打补丁后需要重启服务器的情况,需要DBA去手工启动Oracle实例的情形,和同事讨论,决定将UAT环境的Oracle实例启停设置成systemd服务,使其开机......
  • Linux-vscode-c++-slambook2-库文件找不到路径
    Linux-vscode-c++-slambook2-库文件找不到路径分享所遇到的困难,填补这些坑洞,希望后来者能够如履平地。首先已经在c_cpp_properties.json中已经添加了相关的文件,"includePath":["${workspaceFolder}/**","/usr/include/eigen3"......
  • awk是一种在 Linux 和 Unix 系统中非常强大且常用的文本处理工具
    一、awk介绍awk是一种在Linux和Unix系统中非常强大且常用的文本处理工具,它的名字来源于其三位创始人AlfredAho、PeterWeinberger和BrianKernighan的姓氏首字母。awk可以对文本文件(或来自标准输入的文本流)按行进行扫描,并根据用户指定的规则来处理文本,比如提取特......
  • 109.Linux环境如何测试磁盘读写性能.md
    目录一.为什么要测试磁盘读写性能二.如何测试磁盘读写性能1.测试读2.测试写三.其他一.为什么要测试磁盘读写性能当我们编写程序时,尤其是服务端程序,有时需要关注程序性能,磁盘的读写性能会对程序性能产生影响,所以我们就要测试磁盘读写性能。二.如何测试磁盘读写性能......
  • 【Linux】Github 仓库克隆速度慢/无法克隆的一种解决方法,利用 Gitee 克隆 Github 仓库
    Github经常由于DNS域名污染以及其他因素克隆不顺利。一种办法是修改hostssudogedit/etc/hosts加上一行XXX.XXX.XXX.XXXgithub.comXXX位置的IP可以通过网站查询IP/服务器github.com的信息-站长工具这种方法比较适合本身可以克隆,但是速度很慢的情况,可以提......
  • Linux cpu hotplug
    背景Readthefuckingsourcecode!--By鲁迅Apictureisworthathousandwords.--By高尔基说明:Kernel版本:4.14ARM64处理器使用工具:SourceInsight3.5,Visio1.介绍LinuxCPU热插拔,支持在系统启动后,关闭任意一个secondarycpu(在ARM架构中,CPU0为bootcpu,不能被......