玩转Linux之内存管理-free

玩转Linux之内存管理-free

  free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。下面给出一个free命令的栗子:

1 [[email protected] ~]# free
2              total       used       free     shared    buffers     cached
3 Mem:       8062392    2092832    5969560          0     187132    1498832
4 -/+ buffers/cache:     406868    7655524
5 Swap:      2097148          0    2097148

  下面介绍一下这个命令的输出结果信息:

  第一行:显示了内存的详细信息,比如说总内存、已用的内存、空闲的内存、多个进程共享的内存、用于缓冲区的内存以及用于缓存的内存。

  第二行:显示了总的缓冲区内存/缓存的内存使用以及空闲的情况。使用的是第二行used总内存(2092832)-used缓冲区内存(187132)-used缓存区内存(1498832)=406868.空闲的是total的(8062392)-used的缓存/缓冲区内存(406868)=7655524.

  第三行:显示了总的交换区总内存、已用的以及空闲的内存。交换区的就是在HDD上创建的用来增加虚拟的增加内存大小的虚拟内存。那么问题来了:

缓冲区和缓存有什么区别呢?

  缓冲区是针对特定的应用临时存储数据的地方,而且这些数据不能被其它应用使用。这和带宽的概念比较相似。当你尝试通过网络来传输突发性的数据时,如果你的网卡只能发送少量的数据时,它能把这些大量的数据存在缓冲区中,以便它能以较低的网卡能接受的速度来发送这些数据。在另一方面,缓存是为了更快的访问而存储一些被频繁使用的数据的东西。其它的不同就是缓存能被多次使用而缓冲区只能被用一次。但是它们都为你的数据处理提供一个临时存储。下面举些栗子来说下使用方法。

free命令使用的栗子

  1.以兆字节为单位显示内存(常用)

  这个是很好记的,就是-m:

1 [[email protected] ~]# free -m
2              total       used       free     shared    buffers     cached
3 Mem:          7873       2043       5829          0        182       1463
4 -/+ buffers/cache:        397       7476
5 Swap:         2047          0       2047

  2.还有以字节、千字节、千兆为单位显示内存(不常用)

  使用-b、-k、-g参数,即可以字节、千字节、千兆字节为单位显示内存的大小:

1 [[email protected] ~]# free -b
2              total       used       free     shared    buffers     cached
3 Mem:    8255889408 2142736384 6113153024          0  191623168 1534803968
4 -/+ buffers/cache:  416309248 7839580160
5 Swap:   2147479552          0 2147479552

  3.显示总计使用情况

  使用-t参数,将会多一行total用于显示总的使用量:

1 [[email protected] ~]# free -t
2              total       used       free     shared    buffers     cached
3 Mem:       8062392    2092516    5969876          0     187132    1498832
4 -/+ buffers/cache:     406552    7655840
5 Swap:      2097148          0    2097148
6 Total:    10159540    2092516    8067024

  4.关闭显示缓冲区那一行

  使用-o参数,即可关闭第二行的显示:

1 [[email protected] ~]# free -o
2              total       used       free     shared    buffers     cached
3 Mem:       8062392    2092764    5969628          0     187132    1498832
4 Swap:      2097148          0    2097148

  5.以一个固定的时间间隔更新当前内存使用情况

  加上-s参数,然后在-s参数后加上一个整数便会在定期的时间间隔中更新内存的使用情况,下面我将举个栗子,凑个整数吧,在1024s内更新一次:

1 [[email protected] ~]# free -o
2              total       used       free     shared    buffers     cached
3 Mem:       8062392    2092764    5969628          0     187132    1498832
4 Swap:      2097148          0    2097148

  6.额外显示低以及高的内存的统计数据

  使用-l参数额外显示低以及高的内存大小统计数据:

1 [[email protected] ~]# free -l
2              total       used       free     shared    buffers     cached
3 Mem:       8062392    2092516    5969876          0     187132    1498832
4 Low:       8062392    2092516    5969876
5 High:            0          0          0
6 -/+ buffers/cache:     406552    7655840
7 Swap:      2097148          0    2097148

  7.查看free命令的版本

  使用-V参数显示版本信息:

1 [[email protected] ~]# free -V
2 procps version 3.2.8

  以上。

参考:http://www.linuxnix.com/2013/05/find-ram-size-in-linuxunix.html

   http://www.tecmint.com/check-memory-usage-in-linux/

PS:本博客欢迎转发,但请注明博客地址及作者,因本人水平有限,若有不对之处,欢迎指出,谢谢~

  博客地址:http://www.cnblogs.com/voidy/

  博客新址:http://voidy.net

  <。)#)))≦

时间: 2024-08-02 11:01:41

玩转Linux之内存管理-free的相关文章

Linux内核——内存管理

内存管理 页 内核把物理页作为内存管理的基本单位:内存管理单元(MMU,管理内存并把虚拟地址转换为物理地址)通常以页为单位进行处理.MMU以页大小为单位来管理系统中的页表.从虚拟内存的角度看,页就是最小单位. 32位系统:页大小4KB 64位系统:页大小8KB 在支持4KB页大小并有1GB物理内存的机器上,物理内存会被划分为262144个页.内核用 struct page 结构表示系统中的每个物理页. struct page { page_flags_t flags;   /* 表示页的状态,每

Linux基础-----内存管理

free -m 查看内存大小 Mem:物理内存统计 total 物理内存大小 used  以使用内存(包含buffers;bached) free  空闲内存 shared 共享内存 buffers 缓冲(用于写操作) cached  缓存(用于读操作) -+ buffers/cached used (不包含buffers和cached;实际内存使用量) free  (包含buffers和cached;实际空闲内存) 根据以上分析,可以得出一下结论: 1.  实际可用内存大小: Free= Fr

从一道面试题(死循环里分配内存)阐述Linux的内存管理

题目: int cnt = 0; while(1) { ++cnt; ptr = (char *)malloc(1024*1024*128); if(ptr == NULL) { printf("%s\n", "is null"); break; } } printf("%d\n", cnt); 这个程序会有怎样的输出呢? 结果在Linux32位机是 is null 3057 为嘛是3057?? 因为用户态虚拟内存地址空间是3G. 3057M 大

linux内核 内存管理

以下内容汇总自网络. 在早期的计算机中,程序是直接运行在物理内存上的.换句话说,就是程序在运行的过程中访问的都是物理地址. 如果这个系统只运行一个程序,那么只要这个程序所需的内存不要超过该机器的物理内存就不会出现问题,我们也就不需要考虑内存管理这个麻烦事了,反正就你一个程序,就这么点内存,吃不吃得饱那是你的事情了. 然而现在的系统都是支持多任务,多进程的,这样CPU以及其他硬件的利用率会更高,这个时候我们就要考虑到将系统内有限的物理内存如何及时有效的分配给多个程序了,这个事情本身我们就称之为内存

Linux中内存管理

转载自:http://blog.chinaunix.net/uid-26611383-id-3761754.html 前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识. 我比较喜欢搞清楚一个技术本身的发展历程,简而言之就是这个技术是怎么发展而来的,在这个技术之前存在哪些技术,这些技术有哪些特点,为什么会被目前的技术所取代,而目前的技术又解决了之前的

Linux堆内存管理深入分析(下)

 Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分配和释放策略中使用到的隐式链表技术.通过前面的介绍,我们知道使用隐式链表来管理内存chunk总会涉及到内存的遍历,效率极低.对此glibc malloc引入了显示链表技术来提高堆内存分配和释放的效率. 所谓的显示链表就是我们在数据结构中常用的链表,而链表本质上就是将一些属性相同的“结点”串联起来,方

Linux堆内存管理深入分析

(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢出的漏洞利用资料就很少了.鄙人以为主要是堆溢出漏洞的门槛较高,需要先吃透相应操作系统的堆内存管理机制,而这部分内容一直是一个难点.因此本系列文章主要从Linux系统堆内存管理机制出发,逐步介绍诸如基本堆溢出漏洞.基于unlink的堆溢出漏洞利用.double fr

浅谈Linux的内存管理机制

转至:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存          我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念.物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的

Linux堆内存管理深入分析(上)

Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 ? 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢出的漏洞利用资料就很少了.鄙人以为主要是堆溢出漏洞的门槛较高,需要先吃透相应操作系统的堆内存管理机制,而这部分内容一直是一个难点.因此本系列文章主要从Linux系统堆内存管理机制出发,逐步介绍诸如基本堆溢出漏洞.基于unlink的