os内存使用管理之linux篇

看一下LINUX内存机制是怎么运作的,了解了基础知识,对于理解和操作是有很大帮助的。

抛砖引玉:
Linux 优先使用物理内存,当物理内存还有空闲时,linux是不会施放内存的,即时占用内存的程序已经

被关闭了(这部分内存就用来做缓存了)。也就是说,即时你有2G的内存,用过一段时间后,也会被占满

。这样做的好处是,启动那些刚开启过的程序、或是读取刚存取过得数据会比较快,对于服务器很有好处

你可以用 free 指令查看一下输出,用 used 减去 buffer 和 cache,才是你运行中的程序所占用的空

间,举例如下:

total     used      free    shared   buffers    cached

Mem:   516300   504264     12036     0       88396    236792
 -/+ buffers/cache: 179076 337224
 Swap: 1544184 21276 1522908

504264 - 88396 - 236792 = 179076

也就是说目前正在被使用的内存只有 179 兆。不要被 504兆的used吓住了。

windows则总是给内存留下一定的空闲空间,即时内存有空闲也会让程序使用一些虚拟内存,这样做的好

处是,启动新的程序比较快,直接分给它些空闲内存就可以了,而linux下呢?由于内存经常处于全部被

使用的状态,则要先清理出一块内存,再分配给新的程序使用,因此,新程序的启动会慢一些。

另外,内存是随机访问的,也就是说,无论你的内存占用了多少,数据的存取时间都是相同的,跟硬盘

不同。

linux 内存使用高原因  2009-09-05 10:40:02|  分类: Linux |  标签: |字号大

小 订阅
linux 机子新装内存used偏高...
往往给出这样的结果,怀疑内存用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

这样怀疑很普遍,因为很多人用惯了Windows。Windows下,可以使用任务管理器查看当前进程对于内存的

消耗情况。在我看来,Windows物理内存总是留下一定的空间,就算此时物理内存有空闲时,也会让某些

程序去使用虚拟内存,目的是在Windows下启动新程序时,直接分配空闲的物理内存,这样子新程序启动

速度就较快,而Linux则不然。

而在Linux下,使用top命令看到内存占用情况:

Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

这里的结果显示使用了3.8G的used,占用率达到90%。看看free的结果你还可以对比一下:
$ free -m
     total used free shared buffers cached
Mem: 4049  3784 265   0       208   2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588

虽然MEM显示了3.7G左右的used,但是(-/+ buffers/cache)减去buffers和cache的结果可以看到,当前

进程实际占用内存是636M,而可用空闲(free)内存为3.4G。

可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不

会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启

过的程序、或是读取刚存取过得数据会比较快。

如上面的例子:使用了4G的内存,3.7G被占用,但是buuffer和cached部分作为缓存,可以使用命中率的

方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使

用,也可以认为它是空闲的。

因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用

,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。

未完待补充。。。。。。。

以上整理来之网上。

os内存使用管理之linux篇的更多相关文章

  1. os内存使用管理之unix-AIX篇

    os内存使用管理之unix-AIX篇 未完待补充.....

  2. linux 内存地址空间管理 mm_struct

    http://blog.csdn.net/yusiguyuan/article/details/39520933 Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起 ...

  3. LWJGL3的内存管理,第一篇,基础知识

    LWJGL3的内存管理,第一篇,基础知识 为了讨论LWJGL在内存分配方面的设计,我将会分为数篇随笔分开介绍,本篇将主要介绍一些大方向的问题和一些必备的知识. 何为"绑定(binding)& ...

  4. 从内存管理原理,窥探OS内存管理机制

    摘要:本文将从最简单的内存管理原理说起,带大家一起窥探OS的内存管理机制,由此熟悉底层的内存管理机制,写出高效的应用程序. 本文分享自华为云社区<探索OS的内存管理原理>,作者:元闰子 . ...

  5. Linux内存描述之概述--Linux内存管理(一)

    1 前景回顾 1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 将可用内存以连续方式组织起来, 非均匀存储器 ...

  6. 内存管理相关函数 -- Linux【转】

    转自:http://blog.csdn.net/cy_cai/article/details/47001245 1.kmalloc()/kfree() static __always_inline v ...

  7. [转帖]运维必读:Linux 的内存分页管理

    运维必读:Linux 的内存分页管理 https://cloud.tencent.com/developer/article/1356431 内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在 ...

  8. LWJGL3的内存管理,第二篇,栈上分配

    LWJGL3的内存管理,第二篇,栈上分配 简介 为了讨论LWJGL在内存分配方面的设计,本文将作为该系列随笔中的第二篇,用来讨论在栈上进行内存分配的策略,该策略在 LWJGL3 中体现为以 Memor ...

  9. 【热文】 为什么很多硅谷工程师偏爱 OS X,而不是 Linux 或 Windows?

    校对:伯乐在线 - 黄利民 链接: 1. Why do most of the developers in Silicon Valley prefer OS X over Linux or Windo ...

随机推荐

  1. Poj 2092 Grandpa is Famous(基数排序)

    题目链接:http://poj.org/problem?id=2092 思路分析:先统计数据,在根据Count降序排序,Count相等时按照Num升序排序:再输出Count第二大的所有Num: 代码如 ...

  2. 暂时和永久改动oracle sysdate的默认输出格式

    1.当前会话有效 alter session set NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'; 2.永久生效 sys用户登入后运行例如以下命令 然后重新启动数据 ...

  3. RGB,CMYK,HSB各种颜色表示的转换 C#语言

    Introduction Why an article on "colors"? It's the same question I asked myself before writ ...

  4. JavaScript 、ECMAScript、commonJS 发展历史 与标准化发展

    本文介绍下JavaScript和 ECMAScript的诞生及发展历史,以及标准化过程. 一.JavaScript诞生 1994年,网景公司(Netscape)发布了Navigator浏览器0.9版. ...

  5. 发送邮件给某人:mailto标签

    mailto标签 1.标签最简式 <a href="mailto:xxx@xx.com">联系站长</a> 2.标签帮你填抄送地址 <a href=& ...

  6. 第一次PS练习

    嘿嘿,自己第一次的PS,虽然把在大神眼里是小KS,但是了,对我来说值得劲纪念.加油,我会努力的.

  7. 用eclipse编写Android程序时怎样生成apk文件

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/16828449 APK是Android Package的缩写,即Android安装包.通过将 ...

  8. JavaScript 字符串编码函数

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  9. JVM--常见的虚拟机回收算法

    Serial GC -XX:+UseSerialGC 这样就设置为了串行GC回收方式,这种方式在Client模式下是默认的. 一般是使用在单机程序,小内存,CPU个数少的机器上. 没有复杂的算法,只用 ...

  10. (读书笔记).NET大局观-.NET框架类库概观

    .NET框架类库概况 构建在.NET框架上所有的软件,都会用到通用语言进行时,即使基于最简单的CLR程序,也需要用到一部分.NET框架类库,更精致复杂的软件则使用这个类库提供的更多服务. .NET框架 ...