输出的第一行(Mem:)显示出物理内存的使用情况。总和(total)列中并没有显示出被内核使用的内存,它通常将近一兆字节。已用列(used column)显示出已用内存的总和(第二行没有把缓冲算进来)。空闲列(free column)显示了所有未被使用的空闲内存。共享列(shared column)显示出了被几个进程共享的内存的大小;共享的内存越多,情况就越好。缓存列(buffer column)显示出了当前磁盘缓存的大小。已缓冲列(cached column)显示出了已使用的缓存的大小。

最后一行(Swap:)显示出了与交换空间相应的信息。如果这一行的数值都是零,表示你的交换空间没有被击活。

也可通过用top命令来获得同样的信息,或者使用proc文件系统中的文件/proc/meminfo 。通常要取得指定交换空间的使用情况是困难的。

可以使用命令swapoff来移去一个交换空间。通常没有必要这样做,但临时交换空间除外。一般,在交换空间中的页面首先被换入内存;如果此时没有足够的物理内存来容纳它们又将被交换出来(到其他的交换空间中)。如果没有足够的虚拟内存来容纳所有这些页面,Linux就会波动而不正常;但经过一段较长的时间Linux会恢复,但此时系统已不可用了。在移去一个交换空间之前,你应该检查(例如,用free)是否有足够的空闲内存。

任何由swapon –a而自动被使用的所有交换空间都能够用swapoff –a命令移去;该命令参考/etc/fstab文件来确定移去什么。任何手工设置使用的交换空间将始终可以被使用。

有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这是有可能发生的,例如如果在某一时刻有进行交换的必要,但后来一个占用很多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。对此并没有什么可担心的,但是知道了是怎么一回事我们也就放心了。

许多操作系统使用了虚拟内存的方法。因为它们仅在运行时才需要交换空间,以即决不会在同一时间使用交换空间,因此,除了当前正在运行的操作系统的交换空间,其它的就是一种浪费。所以让它们共享一个交换空间将会更有效率。这是可能的,但需要有一定的了解。在HOWTO技巧文档中含有如何实现这种做法的一些建议。

有些人会对你说需要用物理内存的两倍容量来分配交换空间,但这是不对的。下面是合适的做法:

。估计你的总内存需求。这是某一时刻你所需要的最大的内存容量,也就是在同一时刻你想运行的所有程序所需内存的总和。通过同时运行所有的程序你可以做到这一点。

例如,如果你要运行X,你将给它分配大约8MB内存,gcc需要几兆字节(有些文件要求异呼寻常的大量的内存量,多至几十兆字节,但通常约4兆字节应该够了),等等。内核本身要用大约1兆字节、普通的shell以及其它一些工具可能需要几百千字节(就说总和要1兆字节吧)。并不需要进行精确的计算,粗率的估计也就足够了,但你必须考虑到最坏的情况。

注意,如果会有几个人同时使用这个系统,他们都将消耗内存。然而,如果两个人同时运行一个程序,内存消耗的总量并不是翻倍,因为代码页以及共享的库只存在一份。

Free以及ps命令对估计所需的内存容量是很有帮助的。

对第一步中的估计放宽一些。这是因为对程序在内存中占用多少的估计通常是不准的,因为你很可能忘掉几个你要运行的程序,以及,确信你还要有一些多余的空间用于以防万一。这需几兆字节就够了。(多分配总比少分配交换空间要好,但并不需要过分这样以至于使用整个硬盘,因为不用的交换空间是浪费的空间;参见后面的有关增加交换空间。)同样,因为处理数值更好做,你可以将容量值加大到整数兆字节。

基于上面的计算,你就知道了你将需要总和为多少的内存。所以,为了分配交换空间,你仅需从所需总内存量中减去实际物理内存的容量,你就知道了你需要多少的交换空间。(在某些UNIX版本中,你还需要为物理内存的映像分配空间,所以第二步中算出的总量正是你所需要的交换空间的容量,而无需再做上述中的减法运算了。)

如果你计算出的交换空间容量远远大于你的物理内存(大于两倍以上),你通常需要再买些内存来,否则的话,系统的性能将非常低。

有几个交换空间是个好主意,即使计算指出你一个都不需要。Linux系统常常动不动就使用交换空间,以保持尽可能多的空闲物理内存。即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间:当磁盘闲着,就可以提前做好交换。

可以将交换空间分散在几个硬盘之上。针对相关磁盘的速度以及对磁盘的访问模式,这样做可以提高性能。你可能想实验几个方案,但是你要认识到这些实验常常是非常困难的。不要相信其中一个方案比另一个好的说法,因为并不总是这样的。

linux内存管理简介,Linux操作系统的内存管理特性简介 (3)相关推荐

  1. java内存-xms 单位_java堆内存JVM属性调优总结(-Xms -Xmx -Xmn -Xss)

    Xms 是指设定程序启动时占用内存大小.一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢. Xmx 是指设定程序运行期间最大可占用的内存大小.如果程序运行需要占用更多的内存,超出了这 ...

  2. 【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )

    文章目录 一.内存区域 zone 简介 二.zone 结构体源码分析 1.watermark 成员 2.lowmem_reserve 成员 3.zone_pgdat 成员 4.pageset 成员 5 ...

  3. linux内存管理子系统采用基于内存区域,Linux 内存管理之highmem简介

    一.Linux内核地址空间 一般来说Linux 内核按照 3:1 的比率来划分虚拟内存(X86等):3 GB 的虚拟内存用于用户空间,1GB 的内存用于内核空间.当然有些体系结构如MIPS使用2:2 ...

  4. windows进程管理器_面向Windows,Linux,Mac ,安卓, 木马,密码破解内存提取基于KPCR结构的技术研究...

    Windows内存分析原理 内存镜像存储的是二进制数据,内存取证分析的任务就是从这些貌似毫无意义的二进制数据中找到系统的运行信息.这些二进制数据从根本上说,其来源都是操作系统的内存分配.为何分配.如何 ...

  5. Windows内存管理和linux内存管理

    windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或 ...

  6. Linux 操作系统原理 — 内存 — 页式管理、段式管理与段页式管理

    目录 文章目录 目录 前文列表 页式管理 快表 多级页表 基于页表的虚实地址转换原理 应用 TLB 快表提升虚实地址转换速度 页式虚拟存储器工作的全过程 缺页中断 为什么 Linux 默认页大小是 4 ...

  7. linux内核分为子系统,Linux内核内存管理子系统分析【转】

    还是那张熟悉的老图:Linux内核子系统简介(由七个部分组成) Linux内存管理模型: 1. 内存管子系统职能: 1>  管理虚拟地址与物理地址的映射 2>  管理物理内存的分配 2. ...

  8. linux内存管理(十)-页表管理

    页表管理方法 之前也讲过页表的结构,现在更加详细的讲解一下,页表最主要的作用就是将虚拟地址转化为物理地址,其实他还有两个作用,一个是管理cpu对物理页的访问权限(读写执行权限),另一个是隔离各个进程的 ...

  9. linux内存管理(一)-内存管理架构

    文章目录 一.内存管理架构 二.虚拟地址空间布局架构 2.1内核地址空间布局 2.2用户地址空间布局 三.物理内存体系架构 3.1 正常内存 3.2 设备内存 四.内存结构 五.内存模型 六.虚拟地址 ...

  10. 嵌入式Linux驱动笔记(二十九)------内存管理之伙伴算法(Buddy)分析

    你好!这里是风筝的博客, 欢迎和我一起交流. 我们知道,在一个通用操作系统里,频繁申请内存释放内存都会出现一个非常著名的内存管理问题:内存碎片. 学过操作系统的都知道,有很多行之有效的方法(比如:记录 ...

最新文章

  1. 如何找回RAID1丢失的数据
  2. 使用lucce分词怎么_深度学习时代,分词真的有必要吗
  3. 声明变量_如果同时声明多个变量
  4. Matlab矩阵替换所有等于某个值的数
  5. 工厂方法模式(Factory Method Pattern)
  6. 分布科技荣登海南省实施区块链应用示范揭榜工程名单
  7. 用WPF实现在ListView中的鼠标悬停Tooltip显示
  8. 拓端tecdat|R语言使用ARIMA模型预测股票收益时间序列
  9. python库发布之从零到一:发布自己的第一个库——blogdownloader
  10. 使用python简单免费转换视频格式
  11. 关关php采集插件,推荐使用:关关采集器(杰奇全版本通用编码版)v3.5.00
  12. android fresco 流程,Android Fresco 笔记
  13. 成功解决:ping不通腾讯云服务器问题
  14. OUC2021软件工程OUC拼车程序小组Gamma阶段博客目录
  15. NIPS论文系列|复数域RNN,深层生成模型,DRL在MDP中的应用(已开源)
  16. 在Mac OS上模拟DOS
  17. Parameter 0 of method linkDiscoverers in org.springframework.hateoas.config.HateoasConfiguration req
  18. python作品简单手工做法_教你用塑料瓶做一款简易的小汽车
  19. How to Use UMAP
  20. ps 的切片及切片选择工具使用

热门文章

  1. PHP 实现中文截取无乱码的方法
  2. 《计算复杂性:现代方法》——0.2 判定问题/语言
  3. Markdown文件导出为HTML的小程序
  4. 基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?
  5. ListView中加入Button后,Button的点击事件和ListView的点击事件冲突
  6. python --函数
  7. LAMP搭建之三:php编译安装
  8. 走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar)...
  9. 【oracle灾备方案系列】基于DDS的Oracle复制容灾方案(三)
  10. python将ros下bag文件的所有topic解析为csv格式