精华内容
下载资源
问答
  • 一种新的适用于Nandflash的Linux内存交换模型.pdf
  • Linux上,内存交换有着特殊的作用,块设备在当前的Linux内核上充当交换区时,工作得很好;Nandflash在写入数据之前需要先擦除,因此当Nandflash充当交换区时,当前的内存交换模型就需要改进,否则内存交换就不能...
  • 内存交换分区(swap) 1.概念:存在硬盘中的一个分区,用来暂时存放内存中的数据 2.功能与特点 功能:CPU读取的数据都是来自于内存,如果内存不足的时候,为了让后续的程序可以顺利运行,就会将暂时不使用的程序...

    一、内存交换分区(swap)

    • 概念:存在硬盘中的一个分区,用来暂时存放内存中的数据
    • 功能与特点
      • 功能:CPU读取的数据都是来自于内存,如果内存不足的时候,为了让后续的程序可以顺利运行,就会将暂时不使用的程序与数据挪到内存交换分区中,这样内存就会空出来给需要的程序加载使用
      • 特点:如果硬件的设备资源足够的话,一般用不到内存交换分区。如果物理内存不足时,会使用到内存交换分区。所以早期安装Linux的时候,会使用到两个硬盘分区,一个是根目录,一个是内存交换分区
      • 特点:内存交换分区默认处于停用状态,可以使用swapon命令启用或者写入到/etc/fstab配置文件中进行自动启用
      • 一般来讲,swap 分区容量应大于物理内存大小,建议是内存的两倍,但不超过 2GB
    • 何时使用到内存交换分区?
      • 目前主机的内存一般都在4GB以上,一般使用不到内存交换分区。但是服务器/工作站等需要,因为服务器/工作站有时可能会爆发出大量的网络请求,此时就需要内存交换分区来缓冲一下内存的使用量
      • 如果你的主机支持电源管理模式,也就是说你的Linux主机可以进入休眠模式,那么,运行当中的程序状态会被记录到内存交换区,以作为唤醒主机的状态依据
      • 另外,某些程序在运行时,可能会利用内存交换分区的特性来存放一些数据
      • 综上所述,内存交换分区还是需要建立的,但是不需要建立太大
    • 内存交换分区的创建,有两种方式可以创建
      • 第一种:使用物理内存创建内存交换分区
      • 第二种:使用文件创建内存交换分区

    二、相关命令

    mkswap命令

    • 功能:格式化swap文件系统
    • 格式:
     mkswap [options] device [size]

    swapon命令

    • 功能:启动交换分区、观察交换分区信息等(与系统格式化mount命令很相似)
    • 格式:
    swapon [options] [specialfile...]
    
    swapoff [-va] [specialfile...]
    • 例如:
      • ①启用交换分区:swapon  设备文件名
      • ②查看当前系统处于使用状态的交换分区信息:swapon -s
      • ③根据/etc/fstab配置文件的内容,将未自动启动的交换分区进行启用:swapon -a

    swapoff命令

    • 功能:与swapon命令相反,此命令是将内存交换分区关闭使用
    • 格式:
    swapon [options] [specialfile...]
    
    swapoff [-va] [specialfile...]

    三、使用物理内存创建内存交换分区

    • 步骤:
      • 第一步:划分一个新的分区。使用gdisk/fdisk命令在磁盘上划分出一个分区给系统作为内存交换分区
      • 第二步:格式化。使用mkswap对分区进行格式化
      • 第三步:启动swap设备。使用swapon命令
      • 第四步(自选):设置开机自动启动。将信息写入/etc/fstab文件中
      • 第四五(自选):观察状态。使用free与swapon -s命令观察内存的使用量

    演示案例

    • 第一步:划分出一个新的分区。因为我的Linux系统有过一个swap分区了,所以不再进行演示。可以根据自己磁盘格式,使用gdisk与fdisk执行n命令划分一个新的分区,交换分区大小自己设置(与普通磁盘分区的方法一模一样)
    gdisk /dev/sda
    n
    w
    y
    partprobe
    • 第二步:格式化。使用mkswap对分区进行格式化。我的系统中/dev/sda5是内存交换分区
    格式化:mkswap /dev/sda5

    • 第三步:启动swap设备。使用swapon命令

    • 第四步(自选):设置开机自动启动。将以下信息写入/etc/fstab文件中(注意:因为内存交换分区没有挂载点,所以第二栏填写swap)
    UUID="21ef885b-2fd2-4afe-ae45-3916001c3b67" swap swap defaults 0 0
    然后再更新/etc/fstab配置文件:swapon -a
    • 第五步(自选):观察状态。使用free与swapon -s命令观察内存的使用量

    • free命令:列出磁盘所有的分区信息(但不显示loop设备类型的交换分区)。Mem为磁盘主要内存,Swap为交换分区信息。信息被分为6栏(buffers为缓存占用量)

    四、使用文件创建内存交换分区

    • 步骤:
      • 第一步:使用dd命令创建一个新文件
      • 第二步:格式化。使用mkswap对分区进行格式化
      • 第三步:启动swap设备。使用swapon命令
      • 第四步(自选):设置开机自动启动。将信息写入/etc/fstab文件中

    具体案例

    • 第一步:使用dd命令创建一个新文件。此处我在/tmp目录下建立一个swap文件,大小为128M

    • 第二步:格式化。使用mkswap对分区进行格式化

    • 第三步:启动swap设备。使用swapon将/tmp/swap启动

    • 第四步(自选):设置开机自动启动。将以下信息写入/etc/fstab文件中。注意:第一栏一定要使用文件名而不使用UUID,因为系统仅会查询区块设备不会查询文件。并且内存交换分区没有挂载点,所以第二栏填写swap
    /tmp/swap swap swap defaults 0 0
    然后再更新/etc/fstab配置文件:swapon -a

    五、设置内存交换分区自动启用

    • 原理:原理与自动挂载的原理相同,就是当系统在启动时,自动进入启用状态,不再需要使用swapon命令进行启用
    • 方法:
      • 将内存交换分区信息写入/etc/fstab配置文件中
      • 并且用swapon -a命令更新状态

    • 我是小董,V公众点击"笔记白嫖"解锁更多【Linux入门基础】资料内容。

    展开全文
  • Linux禁用内存交换

    千次阅读 2019-11-24 20:53:16
    Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。Swap分区在系统的物理内存(这里应该是运行内存)不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的...

    Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。Swap分区在系统的物理内存(这里应该是运行内存)不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

    查看swap的使用情况

    free 命令主要是用来査看内存和 swap 分区的使用情况的

    输入命令

    [root@VM_0_16_centos ~]# free -m
    

    返回结果

    
                  total        used        free      shared  buff/cache   available
    Mem:            991          84         600           0         306         763
    Swap:             0           0           0
    [root@VM_0_16_centos ~]# 
    
    

    参数解析

    参数说明
    total总内存
    used已使用内存
    free空闲的内存
    shared共享内存
    buff/cache是指缓冲内存数/缓存内存数,单位是KB
    available实际可用的内存

    共享内存(Shared)

    在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存

    缓冲(buffers)

    磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。

    缓存(cached)

    把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。

    缓冲和缓存的区别

    简单来讲,cached 是给读取数据时加速的,buffers 是给写入数据加速的。

    cached是指把读取出来的数据保存在内存中,当再次读取时,不用读取硬盘而直接从内存中读取,加速了数据的读取过程;

    buffers是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程度后再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程。

    临时性的调整swap

    一种简单粗暴的方法是设置swap空间为0。但是swap在系统崩溃的时候提供了安全机制,并且会尝试阻止系统因为内存溢出而杀掉进程。所以有些情况可能需要开启swap。这个时候我们需要调整vm.swappiness来尝试降低内存交换的积极性

    关闭swap

    禁用swap

    sudo swapoff -a
    

    启用swap

    sudo swapon -a
    

    查看交换分区状态

    sudo free -m
    

    调整swappiness

    swappiness接受0-100的参数。swappinessswappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间。
    swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

    查询swappiness值

    swappiness的默认值根据系统以及版本不同结果不一样(本人的腾讯云为30、阿里云为0)

    [root@VM_0_16_centos ~]# cat /proc/sys/vm/swappiness
    30
    

    设置swappiness值

    用下面命令可以临时的把swappiness值修改为Elasticsearch文档要说明的1

    [root@VM_0_16_centos ~]# sysctl vm.swappiness=1
    vm.swappiness = 1
    [root@VM_0_16_centos ~]# cat /proc/sys/vm/swappiness
    1
    

    上面对swap的操作并非永久的,在服务器重启之后配置将被还原,假如需要永久性的修改其参数需要用下面的方式

    永久性的设置swap

    永久性禁用swap

    修改/etc/fstab文件

    vim /etc/fstab
    

    注释掉包含单词swap的所有行

    调整swappiness

    执行命令编辑sysctl.conf文件

    vim /etc/sysctl.conf 
    

    在此参数修改为你需要的数据

    vm.swappiness = 10
    

    注意此时查询的时候还是之前的配置

    [root@VM_0_16_centos ~]# cat /proc/sys/vm/swappiness
    1
    

    需要重启服务或者是使用下面的命令使之生效

    sysctl -p
    

    个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容。假如我的这篇内容对你有任何帮助的话,麻烦给我点一个赞。你的点赞就是我前进的动力。

    展开全文
  • Linux SWAP内存交换机制基本概念

    千次阅读 2017-04-10 21:36:30
    Linux SWAP内存交换机制基本概念tags: Linux源码Linux SWAP内存交换机制基本概念 摘要 前序知识 内存交换要做什么 硬件上给予的支持 下面假定场景更好的叙述 Linux中的实现 数据什么时候跑到磁盘上面去的 什么时候换...

    Linux SWAP内存交换机制基本概念

    tags: Linux源码


    摘要

    本文旨在以较容易理解的水平讨论Linux的内存交换机制。文中尽量不涉及具体的代码,不涉及一些边边角角的情况,通过一些图示和比喻更好的让初学者理解内存交换机制的工作原理和作用,但其具体的实现请参考深入Linux内核架构深入理解Linux内核Linux内核情景分析。本文讨论的Linux内核版本为2.6.24
    文中的前半部分提及了很多老生常谈的东西,如果对此有所了解可以借助目录直接跳转到关键的部分。


    前序知识

    内存交换要做什么

    不考虑一些大型机和专用计算机,当今通用计算机结构中存储器一般设计为多层,从最靠近CPU的cache一直到磁盘,如下图示:
    存储器金字塔
    可以看到从上到下速度越来越慢,但价钱却越来越便宜。所以现在通用计算机存储结构之所以搞得这么复杂从上到下分了这么多层,根本原因还是成本。如果制作cache的成本特别低,那也就不会有内存卡,磁盘(磁带等)的存在了,直接来1T的chache好了,又快又好。所以在这样大的约束下,计算机(操作)系统设计人员费劲脑汁设计了缓存交换机制来充分利用计算机硬件,发挥最大的性能。

    1. 缓存机制是一种用空间换时间的机制,由于内存的速度基本上是磁盘速度的 105 ,操作系统将一些特别常用的磁盘上的数据存在内存中,在用户要访问的时候直接从内存中找出数据展示给用户,这样虽然占用了一些内存的空间,却很大程度的加速了数据的访问;
    2. 交换机制是使用时间换空间的。相比磁盘,内存真的小的可怜,我们日常使用的民用计算机一般就是 4G8G 的内存,磁盘的却有 500G1T 之大。交换机制就是把一些不常用的内存的数据暂时存储到磁盘上面上去,腾出来的内存空间留作他用,在需要的时候再从磁盘中将数据读入内存中。这样做虽然从真正需要数据到数据展示在户面前的过程变慢了,但却让整个系统拥有了看似更多的内存

    硬件上给予的支持

    上述工作看似简单,但要想真正实现着实有些困难,第一个比较关键的问题就是在访问内存的时候如何知道这个目的内存数据是真的在内存中还是在磁盘上呢。这里的访问内存不仅仅是指的从高级程序设计角度理解的读写内存中的一个变量值,譬如int a;a=10;,还包含根据内存地址读取一条指令的情况。(如果缺乏相关的知识请参照wiki_PC指令寄存器这篇文章。) CPU中有一个专门的组件叫做MMU(Memory management unit),无论是执行汇编中类似于load、xchange这样操作数据的指令,还是根据 PC 值取下一条指令的时候,CPU都会把要读取内存的地址交给MMU,让其做一次转换,完成从线性地址->物理地址转化。也就是说,CPU执行的汇编代码中的地址和 PC 寄存器中保存的指令地址并不是物理地址。

    (下面为了叙述的方便,用“数据”来统一代表要去内存中读的“二进制串”,不管这个二进制串是常规意义上的数据,还是一条指令)

    简单说一下和这篇文章相关的内存映射的部分。物理地址就是真正到内存中取数据时用的地址,每个内存单元(字节)拥有一个唯一的地址,而线性地址存在的一大原因就是为了完成这篇文章讨论的交换机制(还有其他一些原因)。由于交换机制的存在,给定一个线性地址不一定立马就能够找到一个对应的物理地址,因为数据可能被交换到磁盘上去了。那么如何标记一个数据是不是在内存中呢,以及如何建立一个线性地址到物理地址的映射呢?请耐心往下看。
    具体的数据结构请搜索逻辑地址、线性地址与物理地址–无视分段机制即可,Linux不像Windows,在实现中也没有利用分段机制。要干的事情其实很简单,只不过和硬件相关感觉起来有点绕。

    下面假定场景,更好的叙述

    在内存中

    1. 现在假设CPU要根据线性地址 L1 读内存了,CPU在①处直接把 L1 给MMU后说“MMU你去把内存里面的数据给我读出来,我不管什么映射、交换这些乱七八糟的机制,我只关心我的数据”。MMU接到命令后就在②处查看一个存储在内存中的页表,页表简单来说就是用来记录线性地址->物理地址映射关系的一个表,同时页表中还记录了一个线性地址对应的数据是在内存中还是被交换了出去。现在假定是在内存中的物理地址 p1 处,这样的话就万事大吉了。在步骤③中物理地址 p1 通过总线发送给内存模块然后再步骤④中将数据返回给CPU。这些操作的大部分都是有硬件自动完成的,对应用程序猿来说是透明的,而且速度是很快的。这里还要说明一下,页表是操作系统创建维护的,每个进程有着自己的页表,在进程切换的时候会进行页表的切换。这也是所谓的地址空间的由来,开启页式管理的情况下,每个进程能够拥有完整的地址空间。
    2. 稍微复杂一丢丢的是如果数据不在内存中而在磁盘上。
      在磁盘上
      这种情况下,步骤②的时候MMU发现数据不在内存中,它就会通知操作系统出现了“缺页”的情况。操作系统就会暂停之前程序的执行,寻找还没有用的内存(假设物理地址为 P2 ),在步骤③中将数据从磁盘读到内存中并且在步骤④中更新页表。具体更新页表的操作也就不外乎标记逻辑地址 L1 对应的数据已经在内存中了,然后建立从 L1 -> P2 的映射。这样一来,之前被暂停的指令或依照 PC 读指令的操作将会再次从步骤①执行,不过这次应该就可以像上面的情况一样顺利的把数据从内存中读到CPU中去了。实际的整个过程的细节比文章描述的要复杂的多,这里只是为了说明白大体上一个流程,具体的还是要参考上面推荐的书籍和一些更加细分的博客,这里再次声明

    这就可以看出,想要实现完整的交换机制需要硬件和操作系统的支持,缺一不可。

    Linux中的实现

    数据什么时候跑到磁盘上面去的

    上面描述的读取操作的第二中情况基于这样一种假设“目的数据在磁盘上而不在内存中”。那么有哪些情况下页表中有对应的项,而且项被标记为“不在内存中”呢?从大的角度上讲有以下两种情况

    • 数据来源于磁盘上的一个文件。之前以缓存的目的读入到内存中来过,但是内存紧张了,为了节省内存所以把数据回写到磁盘上去了;数据来源于磁盘上的一个文件,从来还没有读入到内存中来过,只是设置了页表项,这种情况一般出现在内存映射时。
    • 数据由进程动态产生的,譬如堆栈的内存空间,由于内存紧张被换出到磁盘上去了。

    什么时候换出内存

    内核联合使用了如下两种机制
    1. 一个周期性的守护进程(kswapd)在后台运行,该进程不断检查当前的内存使用情况,以使在达到特定的阀值时发起页的交换操作。使用该方法,确保了不会出现突然需要换出大量页的情况。这种情况将导致系统出现很长的等待时间,必须不惜一切代价防止。
    2. 但内核在某些情况下,必须能够预期可能突然出现的严重内存不足,例如在通过伙伴系统(Linux分配内存的一种机制)分配一大块内存时,或创建缓冲区时。如果没有足够的物理内存可用来满足对内存的请求,内核必须尽快换出页,以期释放一些内存空间。在紧急情况下的换出操作,属于直接回收(direct reclamin)的一部分。

    上面这两种方式的底层实现是相似的,只不过对于第二种方式来说如果内存不足的时候采取的措施更强硬一些。毕竟第一种方式只是例行检查,尽量保证内存使用量在一个健康的水平;而第二种方式则是在“有内存需要的时候采取的紧急措施“,所以方式会更强硬一些,譬如函数会一直等待内存数据写入到了磁盘上之后才返回、回收一些并不是那个“不经常使用”的内存。

    如果内核无法满足对内存的请求,甚至在换出页以后也是如此,内么虚拟内存子系统(默认的选择)将通过OOM(out of memory,内存不足)killer了结束一个进程。虽然OOM killer有时候可能导致严重的损失,但比系统完全崩溃要好。如果在内存不足的情况下不采取措施,很可能导致系统崩溃。

    交换与回写什么关系

    上面说的叙述中可以看出交换回写(writeback,又做写回)其实是差不多的,都是在操作系统感受到内存空间不足的时候,腾出来内存空间的一种方式。区别的地方在于:
    交换是针对那些由进程动态产生的、不存在对应的磁盘文件的数据;而回写则是有对应的磁盘文件的数据,还需要说明一下上面提到的根据 PC 中存放的地址去内存中取指令(也就是数据,也就是数据了)的操作过程中,如果指令不在内存中,那么指令一定是被写回到磁盘上去了。因为,一个进程的指令总是在创建进程的时候通过分析加载可执行文件读入到内存中的。(不考虑一些特殊的情况,譬如堆栈溢出攻击)

    所以交换机制要做的很重要的一个事情就是图三步骤③中的,建立原来在内存中的数据到磁盘中的数据的映射。即给定一个进程的线性地址 L1 能够找到与之对应的磁盘逻辑地址 D1 (如果数据不再内存中的话)。从操作系统程序猿的角度去看,一个磁盘就相当于非常非常大的数组,磁盘的逻辑地址 D1 就相当于该数组的索引值,每个数组元素都是一个扇区的大小,这是磁盘寻址的最小单元,通常为 512byte
    那么,步骤③更详细的叙述为 : 操作系统通过交换机制建立起来的映射,找到 L1 对应的 D1 。然后分配一块至少能够放得下一个扇区的内存,内存的物理地址为 P1 。下一步将二元组 (D1P1) 交给下层的虚拟文件层。虚拟文件层需要上层传递的这两个主要的参数,即可将磁盘逻辑地址 D1 中的数据读入到内存物理地址 P1 去。到此为止内核就完成了步骤③的工作。不了解虚拟文件层没有关系,只需要知道其上述功能即可;而且,也就是说交换机制不会涉及数据是如何写入到磁盘中去的,又是如何从磁盘中读出来的,这些都是文件系统和驱动的工作。

    内核本身使用的内存页绝不会换出。如果这样做的话将会显著增加内核代码的复杂度。由于和其他用户进程相比内核不需要太多的内存,而且与付出的额外工作量相比,将内核页换出的潜在收益实在是太低了。

    小小的总结

    通过上面的叙述,应该基本上说清楚了换出机制是什么、在内核中的作用、属于哪个子系统。具体的实现请参照Linux内核三本经典书籍。


    引用

    文章的引用都已超链接的形式给出,此处就不一一罗列出来了,还有一部分是引自文章开始处推荐的书籍。侵删

    展开全文
  • linux交换内存To understand what Swap memory in Linux is, we will have a look at the concept of RAM and how the Linux system reacts when RAM reaches its maximum capacity. 为了了解Linux中的交换内存,...

    linux交换内存

    To understand what Swap memory in Linux is, we will have a look at the concept of RAM and how the Linux system reacts when RAM reaches its maximum capacity.

    为了了解Linux中的交换内存,我们将了解RAM的概念以及RAM达到最大容量时Linux系统的React。

    With the topic of memory, it is fairly common to come across mentions of RAM and swap space. In this tutorial, we discuss RAM and swap memory to understand why swap memory in Linux is so essential.

    关于内存,提到RAM和交换空间是相当普遍的。 在本教程中,我们讨论RAM和交换内存,以了解为什么Linux中的交换内存如此重要。

    设置上下文... (Setting the Context…)

    Sometimes, you can experience your system getting sluggish while you are working. This usually happens due to the physical memory, or RAM being used at its maximum capacity.

    有时,您会在工作时遇到系统变慢的情况。 这通常是由于物理内存或RAM处于最大容量而导致的。

    This is something we want to avoid, as unavailability of RAM space can cause high I/O wait times and reduced responsiveness for the system. To counter it, the system utilizes swap space. It helps ensure that the system does not exhaust the physical memory of your system. 

    这是我们要避免的事情,因为RAM空间的不可用会导致高的I / O等待时间并降低系统的响应速度。 为了解决这个问题,系统利用交换空间。 它有助于确保系统不会耗尽系统的物理内存。

    RAM如何使用? (How is the RAM used?)

    RAM or the Random Access Memory is the most important part of any digital device. This piece of hardware is where all the data being currently used a processor is stored.

    RAM或随机存取存储器是任何数字设备中最重要的部分。 该硬件是存储处理器当前使用的所有数据的位置。

    This memory location can be read much faster by the processor compared to other locations such as an HDD or SSD.

    与其他位置(例如HDD或SSD)相比,处理器可以更快地读取此存储位置。

    Due to its volatile nature, the RAM only stores the data which is currently being used. As soon as a system is shut down, it loses all the memory which was stored on it. Hence, we use storage devices such as an HDD, SSD or optical drive to permanently store any required data. 

    由于其易失性,RAM仅存储当前正在使用的数据。 一旦系统关闭,它将丢失所有存储在其上的内存。 因此,我们使用HDD,SSD或光盘驱动器之类的存储设备永久存储任何所需的数据。

    But these storage devices also help us in other instances. One such instance is when the RAM is nearing full capacity and cannot hold all the required data at the same time.

    但是这些存储设备还可以在其他情况下为我们提供帮助。 一种这样的情况是RAM接近满容量并且无法同时保存所有必需的数据时。

    This brings us to the concept of swap memory in Linux.

    这使我们想到了Linux中交换内存的概念。

    了解Linux中的交换内存 (Understanding swap memory in Linux)

    Swap memory in Linux is used to prevent data overflow in RAM in event of the system facing high load. This helps prevent the system to become unresponsive due to a lack of memory. It also ensures that applications or processes don’t encounter ‘out-of-memory’ errors.

    Linux中的交换内存用于在系统面临高负载的情况下防止RAM中的数据溢出。 这有助于防止系统由于内存不足而变得无响应。 它还确保应用程序或进程不会遇到“内存不足”错误。

    交换内存如何工作? (How does swap memory work?)

    In terms of memory, a page is a fixed block of memory space. The data blocks occupying the RAM do so in the form of these pages.

    就内存而言,页面是内存空间的固定块。 占用RAM的数据块以这些页的形式存储。

    In the event of the RAM storage nearing its limit, the OS needs to prioritize processes that get to utilize this memory. Hence, the OS selects the old data or processes which may be dormant to free up the RAM. 

    如果RAM存储空间接近其极限,则OS需要优先处理可以利用该存储空间的进程。 因此,操作系统选择了可能Hibernate的旧数据或进程以释放RAM。

    This data is then written in a pre-defined section of the ROM storage device on the system. This section is known as the ‘swap space’.

    然后,将这些数据写入系统上ROM存储设备的预定义部分。 此部分称为“交换空间”。

    This function of the swap memory in Linux allows the OS to maintain sufficient free RAM space at all times. Later, these pages are ‘swapped’ with the ones stored in the RAM as and when needed.

    Linux中交换内存的此功能允许OS始终保持足够的可用RAM空间。 以后,这些页面将根据需要与存储在RAM中的页面进行“交换”。

    为什么交换内存很重要? (Why is swap memory important?)

    RAM space is a precious resource. It is required for all processes. Swap memory in Linux allows the OS to balance available resources. This, in turn, results in the efficient working of your system.

    RAM空间是宝贵的资源。 所有过程都需要它。 Linux中的交换内存使操作系统可以平衡可用资源。 反过来,这又可以提高系统的工作效率。

    The data stored in the swap memory in Linux takes longer to access than that stored in RAM. However, this does not cause any issues. 

    Linux中交换内存中存储的数据比RAM中存储的数据需要更长的访问时间。 但是,这不会引起任何问题。

    All the data written in the swap memory is loaded back into the RAM as soon as it is free, or the data is required for a current process. This makes swap memory in Linux a reliable fail-safe for preventing any out-of-memory exception for the running processes on our system.

    交换存储器中写入的所有数据一经释放就立即加载回RAM,或者当前进程需要该数据。 这使Linux中的交换内存成为可靠的故障保护,可防止系统中正在运行的进程出现内存不足异常。

    Note: It is an essential detail to keep in mind that swap memory is only recommended for systems utilizing mechanical hard disk drives.

    注意:请记住一个重要的细节,即仅对使用机械硬盘驱动器的系统建议使用交换内存。

    In the case of systems using Solid State Drives, creating swap memory partitions has been observed to cause hardware degradation in the long run. This lowers the life of your SSD and may risk memory failure.

    对于使用固态驱动器的系统,从长远来看,创建交换存储器分区会导致硬件性能下降。 这会缩短SSD的使用寿命,并可能会导致内存故障。

    如何检查系统的交换内存分配? (How to check your system’s swap memory allocation?)

    For most systems, it is common to come across a term known as ‘virtual memory’ in the memory properties. Virtual memory is the space on the system which is equal to the sum of the RAM and swap memory in Linux.

    对于大多数系统,通常会在内存属性中遇到一个称为“虚拟内存”的术语。 虚拟内存是系统上的空间,等于Linux中RAM和交换内存的总和。

    Almost all modern Linux systems declare a swap partition by default to prevent memory overflow situations.

    默认情况下,几乎所有现代Linux系统都默认声明一个交换分区,以防止出现内存溢出情况。

    Hence, it may be essential for a Linux user to check the virtual and swap memory allocation on their system. This can help in deciding whether you wish to increase or reduce the swap partition as per your requirements.

    因此,对于Linux用户而言,检查其系统上的虚拟内存和交换内存分配可能至关重要。 这可以帮助您确定是否要根据需要增加或减少交换分区。

    To check the total virtual memory allocation and utilisation on your system, type the following command in your terminal.

    要检查系统上虚拟内存的总分配和利用率,请在终端中键入以下命令。

    
    free -h
    
    Free Memory Swap
    Free Memory Swap
    可用内存交换

    As shown in the screenshot above, this shows you the total available RAM and swap memory.

    如上面的屏幕快照所示,这显示了总的可用RAM和交换内存。

    It also shows you the amount of memory being utilized at the moment and the amount of free memory available to the system.

    它还显示了当前正在使用的内存量以及系统可用的可用内存量。

    Side note: I have explicitly declared a 0% swap for my Linux server since it’s a test environment and has no need for the swap space.

    旁注:我已经明确声明了Linux服务器的0%交换,因为它是一个测试环境,不需要交换空间。

    If you simply wish to find the size of the swap partition on your system, you can use the command line to display the contents of the swap configuration file stored at /proc/swaps using the cat command:

    如果只希望查找系统上交换分区的大小,则可以使用命令行显示以下交换命令的内容,该命令使用cat命令存储在/ proc / swaps中

    
    cat /proc/swaps
    

    As mentioned before, I do not have swap space configured on my system but you can run this command to view the swap space configured for your system.

    如前所述,我的系统上没有配置交换空间,但是您可以运行此命令来查看为系统配置的交换空间。

    结论 (Conclusion)

    In any system, few resources are even close to the importance of RAM space. With the help of swap memory, systems can make the best out of available resources without compromising a lot on performance.

    在任何系统中,几乎没有资源能够接近RAM空间的重要性。 借助交换内存,系统可以充分利用可用资源,而不会影响性能。

    This mechanism silently works in the background to ensure a smooth experience for the users even in the event of high load sessions.

    该机制在后台静默运行,即使在高负载会话的情况下也可以确保用户的流畅体验。

    We hope that, through this tutorial, you were able to develop a good understanding of RAM, along with the concept of swap memory in Linux.

    我们希望通过本教程,您能够对RAM以及Linux中交换内存的概念有一个很好的了解。

    翻译自: https://www.journaldev.com/39237/swap-memory-in-linux

    linux交换内存

    展开全文
  • linux swap 内存交换分区调整.pdf
  • linux swap 内存交换分区 详细介绍.pdf
  • 主要介绍了linux swap交换内存扩容的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • linux 增加交换内存

    千次阅读 2014-07-16 09:46:21
    在安装oracle时提示交换内存不够
  • Linux 关闭交换内存

    千次阅读 2019-04-04 11:35:13
    关闭Linux的swap交换内存 操作:sysctl -w vm.swappiness=0   1. 设置swap: linux系统会用内存做很 多的buffer和cache,所以经常会看到内存用完了,其实这里面可能只有很少的一部分是程序用到的。当...
  • Linux 交换内存处理 CDH 交换内存报错

    千次阅读 2017-11-13 17:08:06
    【关闭Linux的swap交换内存】 操作:sysctl -w vm.swappiness=0 查看交换内存: cat /proc/sys/vm/swappiness  linux系统会用内存做很 多的buffer和cache,所以经常会看到内存用完了,其实这里面可能...
  • linux swap 内存交换分区 详细介绍

    千次阅读 2020-10-06 20:00:39
    Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。 希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题: 1、swap到底是干嘛的? 2、swappiness...
  • Linux下物理内存和虚拟内存交换机制

    千次阅读 2016-03-17 22:29:39
    Linux下物理内存和虚拟内存交换机制   Vmstat是Virtual Memory Statistics虚拟内存统计缩写: 物理内存是计算机内存的大小,从物理内存中读写数据比硬盘中读写数据要快很多,而内存是有限的,所以就有了物理内存和...
  • Linux内存回收和交换

    千次阅读 2019-07-18 08:01:02
    前言Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经有不少变化。本文讨论的swap基于Linux4.4内核代码。Linux内存管理是一套...
  • 首先创建一个分区,使用fdisk或gdisk创建...在创建分区时,分区类型选择Linux Swap。 之后使用以下命令格式化分区: sudo mkswap /dev/设备名 之后使用以下命令激活交换空间: sudo swapon //激活交换空间 fre...
  • Linux SWAP 交换分区大小与内存的关系

    千次阅读 2019-01-15 13:42:00
    LinuxSWAP交换分区大小与内存的关系SWAP(交换分区)【Windows虚拟内存】我们机房中一台Linux服务器运行缓慢,系统服务出现间歇性停止响应,让我过去处理一下这一问题,登录到服务器之后,发现此服务器的物理内存是16G,而...
  • Linux内存描述之内存页面page--Linux内存管理(四)

    万次阅读 多人点赞 2016-08-31 14:18:44
    日期 内核版本 架构 作者 GitHub CSDN 2016-08-31 ... Linux内存管理 1 前景回顾1.1 UMA和NUMA两种模型共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 非均匀存储器
  • 日期 内核版本 架构 作者 GitHub CSDN 2016-08-31 ... Linux内存管理 1 前景回顾前面我们讲到服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)1.1 UMA和NUMA两种模型共享存储型多处理机有两种模型
  • Linux交换空间和内存不足

    千次阅读 2017-05-27 15:50:00
    Linux有两种形式的交换方式,分别是交换分区,交换文件。 优点:可以把空闲的内存页写入磁盘,把空出的内存给进程使用。 缺点:交换发生越多,速度越慢。 交换空间的大小 交换空间的配置原则: 对于桌面系统,...
  • Linux虚拟内存交换空间机制

    千次阅读 2015-12-06 18:37:09
    对于一台x86(32bit)的操作系统来说,假设它有2G的物理内存,物理内存分成以许多个4k为单位大小的页框,这些页框就是存储进程的最小单位: 为了解决系统运行过程中不同进程之间内存的合理分配和利用,防止不同...
  • Linux内存管理

    千次阅读 2018-02-05 14:49:01
    linux下,使用top,vmstat,free等命令查看系统或者进程的内存使用情况时,经常看到buff/cache memeory,swap,avail Mem等,他们都代表什么意思呢?...讨论Linux下的内存管理其实就是讨论Linux
  • Linux使用交换空间来增加主机可用的虚拟内存量。它可以在常规文件系统或逻辑卷上使用一个或多个专用交换分区或交换文件。 在一台典型的计算机中有两种基本的内存类型。第一种类型,随机存取存储器(RAM),用于存储...
  • Linux内存管理机制

    千次阅读 2017-02-16 04:07:24
    这是Linux内存管理的一个优秀特性,主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存(buffer/cache),利用内存读写的高速特性来提高Linux系统的数据访问性能。...
  • Linux 交换区 用磁盘换内存

    千次阅读 2018-03-02 16:05:09
    创建 1G 的交换区 # 创建空文件 dd if=/dev/zero of=/swap bs=1024k count=1024 # 制作成交换区 mkswap /swap ...# 查看当前内存情况 free -m 修改文件权限到安全权限 : chmod 600 /swap do...
  • linux 内存性能调优

    千次阅读 2018-09-12 16:17:04
    关于linux内存系统我们至少应该了解什么?  linux 系统中内存地址分为虚拟地址和物理地址,虚拟地址必须通过mmu映射成物理地址。为了完成虚拟地址到物理地址的映射,linux内核中必须为每一个用户态进程维护一个页...
  • linux内存管理

    2014-02-16 05:59:12
    linux内存管理
  • 内存不足时,linux 系统可以向ROM 要空间给内存使用,zram 和 swap 可以完成该功能。 zram: 是把物理内存的一部分划分出来,把不是常用的内存数据压缩后放到zram里, 用到的时候把数据解压出来, 相当于牺牲了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 149,874
精华内容 59,949
关键字:

linux的内存交换

linux 订阅