转载:Swap与Memory内存简单介绍

2023-11-19

背景介绍

  对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇。Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮)。Linux的很多独特的设计,对性能也产生了巨大的提升,也为其他应用软件和系统提供了参考。这篇文章介绍一下Linux中swap与memory。

  对于memory没什么可说的就是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存的造价是要高于磁盘的,虽然相对来说价格一直在降低。除此之外,内存的断电丢失数据也是一个原因说不能把所有数据和程序都保存在内存中。既然不能全部使用内存,那数据还有程序肯定不可能一直霸占在内存中。当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去。但是踢到哪里去,这时候swap就出现了。swap全称为swap place,,即交换区,当内存不够的时候,被踢出的进程被暂时存储到交换区。当需要这条被踢出的进程的时候,就从交换区重新加载到内存,否则它不会主动交换到真是内存中。

swap介绍

  在详细介绍swap之前,我们需要知道的是计算机对内存分为物理内存与虚拟内存(注意虚拟内存虚拟地址空间的区别)。物理内存就是计算机的实际内存大小,由RAM芯片组成的。虚拟内存则是虚拟出来的、使用磁盘代替内存。虚拟内存的出现,让机器内存不够的情况得到部分解决。当程序运行起来由操作系统做具体虚拟内存到物理内存的替换和加载(相应的页与段的虚拟内存管理)。这里的虚拟内存即所谓的swap。

  当用户提交程序,然后产生进程,在机器上运行。机器会判断当前物理内存是否还有空闲允许进程调入内存运行,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到swap中等待,然后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出swap扮演了一个非常重要的角色,就是暂存被换出的进程。

  内存与swap之间是按照内存页为单位来交换数据的,一般Linux中页的大小设置为4kb。而内存与磁盘则是按照块来交换数据的。

swap的设置

  从上可以看出,当物理内存使用完或者达到一定比例之后,我们可以使用swap做临时的内存使用。当物理内存和swap都被使用完那么就会出错,out of memory。对于使用多大比例内存之后开始使用swap,在系统的配置文件中可以通过调整参数进行修改。

cat  /proc/sys/vm/swappiness

60

  该参数可以从0-100进行设置。0就是最大限度使用内存,尽量不使用swap;100就是积极使用swap。这个具体的通过系统的算法进行确定。

  物理内存我们是无法更改的,所以swap的大小设置将会影响应用能否正常运行。那么swap大小如何确定。根据centos官网介绍可以得出如下公式:M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M *2 Else S = M + 2。而且其最小不应该小于32M(never less than 32 MB.)。

  swap分区的数量对性能也有很大的影响。因为swap毕竟还是以磁盘来伪装成内存,交换的操作是磁盘IO的操作而不是内存的load与store操作。如果有多个swap交换区,每个swap会有一定的优先级,该优先级也可以调整。swap空间的分配会以轮流的方式操作于所有的swap,这样会大大均衡IO的负载,加快swap交换的速度。

四:swap相关命令

  swapon/swapoff swap-disk_name:启动和关闭相应的swap_disk_name

  swapon -s :可以查看当期swap的使用情况,也可以通过 cat /proc/swaps命令查看


参考资料:

虚拟内存介绍:虚拟内存介绍

Linux内存介绍:http://blog.csdn.net/zwan0518/article/details/9040467

centos swap :http://www.centos.org/docs/5/html/5.1/Deployment_Guide/s1-swap-what-is.html

(转载)原文地址:https://blog.csdn.net/zwan0518/article/details/12059213

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转载:Swap与Memory内存简单介绍 的相关文章

  • 如何使用libaudit?

    我试图了解如何使用 libaudit 我想接收有关使用 C C 的用户操作的事件 我不明白如何设置规则 以及如何获取有关用户操作的信息 例如 我想获取用户创建目录时的信息 int audit fd audit open struct aud
  • 测试linux下磁盘空间不足

    我有一个程序 当写入某个文件的磁盘空间不足时 该程序可能会死掉 我不确定是否是这种情况 我想运行它并查看 但我的测试服务器不会很快耗尽空间 有什么办法可以嘲笑这种行为吗 看起来没有任何方法可以在 Ubuntu 中设置文件夹 文件大小限制 并
  • WaitForSingleObject 是否充当内存屏障?

    昨天一个关于双重检查锁定的问题引发了一系列的想法 让我对一个简单的情况感到不确定 在下面的代码中 是否可以点击printf 不再同步 在这个简单的示例中 这些值可能位于同一缓存行上 因此我认为这种可能性较小 假设一开始可能性 gt 0 如果
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • 为什么 MetaSpace 大小是已用 MetaSpace 的两倍?

    我写了一个程序来模拟MetaSpace OOM 但我发现MetaSpace Size几乎总是两倍大Used MetaSpace Why 我用标志运行我的程序 XX MaxMetaspaceSize 50m 程序抛出OOM时Used Meta
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • gcc 不太可能使用宏

    我正在编写一段关键代码 其逻辑大致如下 if expression is true do something with extremely low latency before the nuke blows up This branch i
  • 强制jvm返回本机内存[重复]

    这个问题在这里已经有答案了 我时不时地运行需要大量内存的 eclipse 任务 因此 当任务运行时 jvm 会消耗大约 2 3GB 的 RAM 这是可以的 但是一旦 jvm 占用了该内存 它就不会释放它 并且我遇到了一种情况 堆中已用内存约
  • C 中的菱形数组排序

    我有以下 C 语言作业 我基本上需要一种方法而不是解决方案 我们有一个 13 x 13 的数组 在数组中 我们有一个需要考虑的菱形形状 该菱形之外的所有内容都初始化为 1 不重要 下面的 5 x 5 数组示例 x x 1 x x x 2 2
  • Linux 中的电源管理通知

    在基于 Linux 的系统中 我们可以使用哪些方法 最简单的方法 来获取电源状态更改的通知 例如 当计算机进入睡眠 休眠状态等时 我需要这个主要是为了在睡眠前保留某些状态 当然 在计算机唤醒后恢复该状态 您只需配置即可获得所有这些事件acp
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • 内存不一致与线程交错有何不同?

    我正在编写一个多线程程序 正在研究是否应该使用volatile对于我的布尔标志 关于并发性的文档 oracle Trail 没有解释任何关于memory consistency errors以外 当不同的线程有内存一致性错误时 就会发生内存
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • 可以禁用“应用程序错误”对话框吗?

    我使用 Hudson 作为持续集成服务器来测试 C C 代码 不幸的是 我在某个地方有一个错误导致内存损坏 因此在某些 Windows 计算机上我有时会收到一个 应用程序错误 对话框 解释一条指令引用了无法读取的内存 弹出此对话框并基本上挂
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3

随机推荐

  • go字符串详解

    文章目录 摘要 1 byte和rune类型 2 字符串 string 3 练习 反转字符串 摘要 go字符串结构体包含 指向底层存储数组的指针 字符串长度 字符串按utf 8将字符编码成二进制数 然后存储在byte数组中 因为utf 8编码
  • gin jwt-go 生成token及jwt中间件验证

    一 定义jwt中间件 同时将 生成token 验证token token中间件handlerfunc都写在中间件文件中 基于 github com dgrijalva jwt go 包 gin框架 obj middleware jwt go
  • 回声消除(AEC)原理、算法及实战——AEC背景介绍

    回声就是声音信号经过一系列反射之后 又听到了自己讲话的声音 这就是回声 一些回声是必要的 比如剧院里的音乐回声以及延迟时间较短的房间回声 而大多数回声会造成负面影响 比如在有线或者无线通信时重复听到自己讲话的声音 回想那些年我们开黑打游戏时
  • EL表达式向select中赋值

    在使用el表达式的时候 有时需要向select下拉菜单中赋值 可以使用三目运算法进行赋值
  • 3. ClickHouse数据类型和表结构

    3 1 数据类型 整数类型 整数类型有Int8 Int16 Int32 Int64 分别表示8位 16位 32位和64位有符号整数 适用场景 存储整数值 如年龄 数量等 浮点类型 浮点类型有Float32和Float64 分别表示32位和6
  • Jenkins自动化部署项目

    Jenkins史上最详细的使用教程 jenkins官网 jenkins简单部署Vue项目 jenkins部署springboot项目 jenkins详细部署说明 后续小编会写上自己的使用心得 jenkins官网 https www jenk
  • 计算机用于更新无法卸载补丁,出现windows 系统补丁无法卸载该怎么解决?简单几步即可解决...

    电脑已经成为我们日常生活中的必备品 长期使用电脑肯定会碰到win10系统kb4034674无法卸载提示 没有成功卸载全部更新的问题 很多用户之前从未遇到win10系统kb4034674无法卸载提示 没有成功卸载全部更新这样的问题 其实win
  • 【前端基础知识复习】

    js基础知识复习 原型链 继承 原型链继承 经典继承 借用构造函数 组合继承 1和2结合 常用 原型式继承 ES5 Object create 寄生式继承 寄生组合继承 最理想 作用域与作用域链 闭包 立即执行函数 typeof和insta
  • 服务器内核有未知文件,【原创文章】CENTOS kernel panic无法对未知的块安装根文件系统的解决办法...

    今天突然发现维护的linux系统无法访问了 网站打不开 SSH无法登陆 后台面板也没有响应 打开机房的管理后台 reboot服务器 过了一会还是没有反应 有点纳闷 这是商业网站 不敢怠慢 马上开工找问题 打开机房准备的KVM KVM是基于j
  • 一、super slomo介绍

    本专题文章对super slomo进行一系列操作 降低训练时间 预测时间 导出训练模型 C 调用模型进行预测等 本章对其进行一个简单介绍 来自互联网 2018年CVPR的论文 Super SloMo High Quality Estimat
  • 阿里平头哥CPU技术生态负责人陈炜:平头哥的发展之路

    整理 巫柔颖 RISC V是近年兴起的一种CPU新架构 因其开放 灵活的特性而逐渐成为半导体行业的热门选择 当前 已有近2500家机构加入RISC V基金会 包括阿里 华为 Google 英特尔 IBM等公司 在阿里宣布平头哥开源玄铁RIS
  • windows sql server 如何卸载干净?

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 windows sql server 怎么卸载干净 前言 一 windows sql server是什么 二 如何卸载干净 1 关闭sql server服务 2 到控制面板
  • hive 表创建及字段信息管理

    1 分区表创建及数据导入 1 1 创建分区表 以日期pt分区 字段用 t分隔 输入格式为txt 存储格式为orc use db name drop table if exists tablename CREATE TABLE IF NOT
  • Windows10 adb安装与环境变量配置

    adb安装与环境变量配置 目录 adb安装与环境变量配置 安装adb工具都需要什么 Android SDK 的下载 如何配置变量环境 adb启动不了是什么原因 安装adb工具都需要什么 1 需要下载Android SDK 配置环境变量即可
  • 797. 所有可能的路径

    class Solution public vector
  • 用STM32F407ZET6的HAL库写一个串口接收,发送代码,支持ringbuff

    你可以参考这个示例代码 https www st com content ccc resource technical document application note group0 b5 d4 04 c1 b4 4f 4d e5 DM0
  • 准确率与召回率

    1 准确率与召回率 Precision Recall 准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值 用来评价结果的质量 其中精度是检索出相关文档数与检索出的文档总数的比率 衡量的是检索系统的查准率 召回率是指检索出的相关文档
  • 求字符串长度的三种方法(C语言)

    如何求字符串的长度 首先要明白字符串存储的原理 字符串存储时 是以 0 结尾 这个就可以作为判断字符串结尾的一个条件 接下来 只要有字符串的首元素地址 就可以解决求字符串长度的问题啦 第一种 普通版 int my strlen char s
  • Revit 2019: Essential Training for MEP (Metric) Revit 2019:MEP基本培训 Lynda课程中文字幕

    Revit 2019 Essential Training for MEP Metric Revit 2019 MEP基本培训 Lynda课程中文字幕 Revit 2019 Essential Training for MEP Metric
  • 转载:Swap与Memory内存简单介绍

    背景介绍 对于Linux来说 其在服务器市场的使用已经占据了绝对的霸主地位 不可动摇 Linux的各种设计思想和使用也被传承 当然不乏各种黑Linux 而且黑的漂亮 Linux的很多独特的设计 对性能也产生了巨大的提升 也为其他应用软件和系