查看当前内存使用情况,最常用的指令就是

[root@t ~]# free -m
total used free shared buffers cached
Mem: 22812
-/+ buffers/cache: 23386
Swap:
其中的相关说明:  
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
系统的总物理内存:128g,但系统当前真正可用的内存并不是第一行free 标记的 22812,它仅代表未被分配的内存,真正有参考意义的是第二行的23386,后面会详细说明。
我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
total1:    表示物理内存总量。
used1:     表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free1:     未被分配的内存。
shared1:   共享内存,一般系统不会用到,这里也不讨论。
buffers1: 系统分配但未被使用的buffers 数量。
cached1:   系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
used2:     实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2:     未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存
 
需要说明的是,free -m获取的信息,实际是调用了 /proc/meminfo的内核参数得到的,如果想获取更详细的内存使用信息,可以直接查询meminfo。
 
[root@~]# cat /proc/meminfo
MemTotal: 131789100 kB
MemFree: 23367084 kB
MemAvailable: 23872172 kB
Buffers: 228 kB
Cached: 997224 kB
SwapCached: 0 kB
Active: 96364752 kB
Inactive: 10617236 kB
Active(anon): 95958228 kB
Inactive(anon): 10431640 kB
Active(file): 406524 kB
Inactive(file): 185596 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 105983064 kB
Mapped: 62720 kB
Shmem: 405332 kB
Slab: 272340 kB
SReclaimable: 163808 kB
SUnreclaim: 108532 kB
KernelStack: 13344 kB
PageTables: 245164 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 65894548 kB
Committed_AS: 119839644 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 362048 kB
VmallocChunk: 34359360512 kB
HardwareCorrupted: 0 kB
AnonHugePages: 66662400 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 353264 kB
DirectMap2M: 25800704 kB
DirectMap1G: 110100480 kB

说明:

MemTotal:       131789100 kB    可用的总内存--总物理内存减去kernel 代码/数据段占用再减去保留的内存区,系统从加电开始到引导完成,firmware/BIOS要保留一些内存,kernel本身要占用一些内存,最后剩下可供kernel支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。

MemFree:       23367084 kB   完全未用到的物理内存 LowFree+HighFree,[MemTotal-MemFree]就是已被用掉的内存。这是从OS角度搜集的数据。

MemAvailable:   23872172 kB   字面意思为可用内存,这是一个从应用角度搜集的数据,是内核使用特定的算法估算出来的,要注意这是一个估计值,并不精确。从应用程序的角度来说,可用内存=系统free( memory+buffers+cached.)

Buffers:             228 kB    缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

Cached:           997224 kB   高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周 期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提 高了系统的效率。

缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。

缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。

SwapCached:      0 kB   内存足够的情况下,这个值一般为0

那些匿名内存页,比如用户进程通过malloc()申请的内存页是没有关联任何文件的(有别于backing storage基于磁盘文件的内存页),如果发生swapping换页,这类内存页会被写入交换区。从一个匿名内存页被确定要被换页开始,它就被计入了swap cache,但是不一定会被立刻写入物理交换区,因为Linux的原则是除非绝对必要,尽量避免I/O。所以swap cache中包含的是被确定要swapping换页、但是尚未写入物理交换区的匿名内存页。

Active:         95675704 kB   (pages[LRU_ACTIVE_ANON]   + pages[LRU_ACTIVE_FILE]),缓冲或页面缓存内存的总量,活跃的使用 这是最近的内存回收和通常不用于其他目的。

Inactive:        5615140 kB   pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE],缓冲或页面缓存内存的总量,这是免费的和可用的。这是最近没有使用内存,可以回收用于其他目的。

Active(anon):   95590152 kB   分别表示anonymous pages和mapped pages。用户进程的内存页分为两种:与文件关联的内存(比如程序文件、数据文件所对应的内存页)和与文件无关的内存(比如进程的堆栈,用malloc申请的内存),前者称为file pages或mapped pages,后者称为anonymous pages,这部分具体可以参考LRU 内存管理算法,

HighMem跟LowMem是32bitX86 上面的一种划分,860MB以上内存成为HighMem,ARM架构上面没有这样的划分方式;

Inactive(anon):  5579872 kB

Active(file):      85552 kB

Inactive(file):    35268 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:      31743996 kB      可用的swap空间的总的大小

SwapFree:       24693072 kB     剩余swap空间的大小,内存换出到swap的过程,kswapd()-->balance_pgdat()-->shrink_zone()-->shrink_inactive_list()-->shrink_page_list()(核心函数)-_swap()-->get_swap_page()

Dirty:                12 kB      需要写入磁盘的内存区大小

Writeback:             0 kB      正在被写回磁盘的大小

AnonPages:      100707440 kB      未映射页的内存大小

Mapped:            61560 kB       设备和文件等映射的大小。

Shmem:            154012 kB

Slab:             272120 kB     内核数据结构slab的大小,可以减少申请和释放内存带来的消耗。

SReclaimable:     169236 kB     可收回Slab的大小

SUnreclaim:       102884 kB     不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)

KernelStack:       13352 kB

PageTables:       245108 kB         管理内存分页页面的索引表的大小。

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:    97638544 kB

Committed_AS:   119813492 kB    内存的总量估计完成工作量。 这个值代表的是最坏的情况下的价值,还包括交换内存。

VmallocTotal:   34359738367 kB      内存的总量分配总量的虚拟地址空间。

VmallocUsed:      370836 kB   使用虚拟地址空间

VmallocChunk:   34359359536 kB     最大的连续内存块,可用的虚拟地址空间。

HardwareCorrupted:     0 kB

AnonHugePages:  66578432 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

DirectMap4k:      353264 kB

DirectMap2M:    25800704 kB

DirectMap1G:    110100480 kB

持续更新。。。

linux 内存使用分析的更多相关文章

  1. Linux内存技术分析(下)

    Linux内存技术分析(下) 五.内存使用场景 out of memory 的时代过去了吗?no,内存再充足也不可任性使用. 1.内存的使用场景 page 管理 slab(kmalloc.内存池) 用 ...

  2. Linux内存技术分析(上)

    Linux内存技术分析(上) 一.Linux存储器 限于存储介质的存取速率和成本,现代计算机的存储结构呈现为金字塔型.越往塔顶,存取效率越高.但成本也越高,所以容量也就越小.得益于程序访问的局部性原理 ...

  3. linux内存负载分析

    衡量内存负载的一个很重要的指标就是页面置换的频率.当linux系统频繁的对页进行换进换出 的时候,说明物理内存不过,不得不进行频繁的置换页面. 使用vmstat(virtual memory stat ...

  4. 性能分析 | Linux 内存占用分析

    这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令:查看/proc/[pid]/下的文件.文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/ ...

  5. 利用Volatility对Linux内存取证分析-常用命令翻译

    命令翻译 linux_apihooks - 检查用户名apihooks linux_arp - 打印ARP表 linux_aslr_shift - 自动检测Linux aslr改变 linux_ban ...

  6. linux内存占用分析

    概述 想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存.这里我们可以 ...

  7. 转: 关于Linux与JVM的内存关系分析

    转自: http://tech.meituan.com/linux-jvm-memory.html Linux与JVM的内存关系分析 葛吒2014-08-29 10:00 引言 在一些物理内存为8g的 ...

  8. Linux与JVM的内存关系分析

    引言 在一些物理内存为8g的server上,主要执行一个Java服务,系统内存分配例如以下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m. 从表面 ...

  9. Linux与JVM的内存关系分析(转)

    引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m.从表面上,物理内存 ...

随机推荐

  1. windows下mysql免安装版配置(踩过的坑)简记

    下载 从官网(https://dev.mysql.com/downloads/mysql/)下载 这里的免安装版本的,相对来说干净,但是需要自己来配置很多东西. 配置 首先是注册windows的服务. ...

  2. Google被墙怎么办?

    Google被墙怎么办? 1 声明 请小伙伴们遵守法律法规,我们只是为了更好的查询学习资料. 想使用Google查询相关资料 想使用Google账号管理收藏夹 想使用Google商店安装软件 == 2 ...

  3. 让你彻底明白TCP三次握手,四次挥手

    今天我们来讲一下TCP的三次握手和四次挥手,先来张思维导图.  一.TCP是什么 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流 ...

  4. java基础之----分布式事务tcc

    最近研究了一下分布式事务框架,ttc,总体感觉还可以,当然前提条件下是你要会使用这个框架.下面分层次讲,尽量让想学习的同学读了这篇文章能加以操作运用.我不想废话,直接上干货. 一.什么是tcc?干什么 ...

  5. Scala:用于Java的轻量级函数式编程

    Scala为Java开发提供了轻量级的代码选项,但是学习过程可能会很艰难.了解有关Scala的知识以及是否值得采用. 基于Java的语言通常涉及冗长的语法和特定于领域的语言,用于测试,解析和数值计算过 ...

  6. vue根据选择的月份动态展示当前月份的每一天并展示每一天所对应的星期几

    我们在开发过程中所遇到的所有的奇奇怪怪的交互美其名曰用(奇)户(葩)体(需)验(求),而产品所谓的良好的交互效果,在我等开发人员眼里不值一提.不屑一顾.讨厌至极! 对于这样的需求,我通常都是: 但胳膊 ...

  7. GDAL集成GEOS

    因为要用到缓冲区分析,在使用Buffer的时候提示:ERROR 6: GEOS support not enabled,查了一下资料需要集成GEOS库.因为GDLA默认编译是没有集成GEOS库的. 现 ...

  8. Sql Server学习笔记

    1.指定路径创建数据库 create database student on--创建库的时候必须写 ( name=student, filename='E:\database\student.mdf' ...

  9. .NET Core 3 WPF MVVM框架 Prism系列之事件聚合器

    本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信 一.事件聚合器  在上一篇 .NET Core 3 WPF MVVM框架 Prism系列之模块化 ...

  10. Shell水平测试-想学习Shell的童鞋必选必看文章

    [SHELL水平测试] [OVERVIEW 篇] 有很多种 shell, 你熟悉几种? 各个 shell 的 home page 在那里? 为什么说 zsh 是目前为止功能最为强大的 shell. 为 ...