linux内存管理

   工作经常遇到linux只运行了一个程序,却发现内存占用过高等问题。这可能和我们对linux内存管理机制了解不足有关系。

    内存管理机制:Linux能够充分地去使用内存资源,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时, 才为应用程序分配内存,并不能充分利用大容量的内存空间。基于这一性质,linux会将空闲的、暂时用不到的内存用作cache、buffers(都类似于缓存的功能),以此提高数据的访问性能。buffers用来缓存写,cached用来缓存读。

    要深入了解linux内存运行机制,需要知道下面提到的几个方面:

    1. Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。

    2. Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟 内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需 要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面 文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不 用担心什么,只要知道是怎么一回事就可以了。

    3. 交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页 面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽 然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。

内存管理的命令

1、free

linux内存管理

每个选项的含义:
第一行:
    total:物理内存的总大小
    used:已经使用的物理内存大小
    free:空闲的物理内存大小
    shared:多个进程共享的内存大小
    buffers/cached:磁盘缓存的大小
第二行Mem:代表物理内存使用数值
第三行(-/+ buffers/cached):代表磁盘缓存使用状态
第四行:Swap表示交换空间内存使用状态

    解读:linux内存的占用可以从内核层和应用层解读,内核层理解:used使用了1549980,实际等于第一行的buffers+cached+第二行的used。所以,可以这样认为应用程序本身占了457000,但是为了配合其使用而动用了buffers的87104和cached的1005876(当然这些缓存并不是全部用来为了当前程序运行做的缓存,还能缓存了之前别的程序的文件)才使得程序正常运行。

    第二行的free1597752=第一行的free+第一行的buffers+第一行的cached.

    2、top  htop vmstat glances iostat netstat dstat




本文转自 ping9527 51CTO博客,原文链接:http://blog.51cto.com/babyhanggege/1896998,如需转载请自行联系原作者

上一篇:[Google Guava] 11-事件总线


下一篇:kube-scheduler的代码逻辑和二次开发