`
zl198751
  • 浏览: 278451 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Linux性能监测工具之三:free(内存状态)

阅读更多

一、作用

用来显示内存的使用情况,使用权限是所有用户


二、语法

free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]

常用参数详解
-b, -k,-m,-g:分别以字节( bytes、KB、MB、GB)为单位显示内存使用情况
-s  delay:显示每隔多少秒数来显示一次内存使用情况(与-c一起使用)
-c:按每隔几秒显示内存使用情况时的刷新次数(与-s一起使用)
-t:显示内存总和列。
-o:不显示缓冲区调节列
-V:free的版本



三、工作原理

1、free命令由procps.*.rpm提供(在Redhat系列的OS上)
2、free命令的所有输出值都是从/proc/meminfo中读出的。 在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个 函数。可以下载一个procps的tar包看看具体实现,现在最新版式3.2.8


四、实例分析


total------
总物理内存
used-------
已使用内存,一般情况这个值会比较大
free------
完全未被使用的内存
shared------
应用程序共享内存
buffers------
缓存,主要用于目录方面、inode 值等(ls 大目录可看到这个值增加)
cached------
缓存,用于已打开的文件

1)
第一行:mem,表示 操作系统物理内存使用情况 针对操作系统而言
total 241:表示物理内存总量为241M
used 61:表示总计分配给缓存(包含buffers 与cache,及应用程序 )使用的数量,但其中可能部分缓存并未实际使用,即61M
free 180:表示未被分配的内存数据为180M
share 0:表示应该程序的共享内存为0M
buffers 7:表示系统分配但未被使用的buffers数量
cached 36:表示系统分配但未被使用的cache数量
公式如下:
(1)total=used+free
=61M+180M=241M
(2)used=buffers+cached (maybe add shared also)+application
=7+36+17=60(因采用MB为单位,所以存在误差)

注意: 为了提高磁盘存取效率, Linux 做了一些精心的设计, 除了对dentry 进行缓存(用于VFS, 加速文件路径名到inode 的转换), 还采取了两种主要Cache 方式:Buffer CachePage Cache 。(呵呵!看到了吧,所以针对操作系统的内存使用情况,usered=buffers+cached+application)前者针对磁盘块的读写,后者针对文件inode 的读写。这些Cache 有效缩短了 I/O 系统调用( 比如read,write,getdents) 的时间


2)第二行:-/+ buffers/cached,表示应用程序的内存使用情况   (针对应用程序而言
-buffers/cache 应用程序使用的内存大小(等于used- 缓存值 =61-7-36=18M,因采用MB为单位,所以存在误差)
+buffers/cache:
所有可供应用程序使用的内存大小(等于free +缓存值=180+7+36=223M)
所以 -buffer/cache 反映的是: 程序实实在在吃掉的内存;而+buffer/cache反映的是: 可以挪用的内存总数
公式如下:
(1) -buffers/cache=used-buffers-cached
(2)+buffers/cache=free+buffers+cached

注意:由于第二行描述的是应用程序的内存使用情况,所以这里的used表示当前应用程序所占用的内存,而free则表示应用程序还可以使用内存(总的物理内存 - 应用程序已经使用的)

3)第三行:Swap,表示硬盘上交换分区的使用情况
total 1019:表示总的交换分区的空间大小
used 0:表示当前还没有使用交换分区那部分空间
free 1019:表示还可用的交换分区的空间大小
注意:
linux系统中,如果 swap分区的空量也开始使用的话,则表示你的内存可能不够用,需要加一些内存了,因为linux是先使用内存的容量,当内存不够用时,才会使用swap 分区的空间,这一点也正是与windows的区别;windows是使用swap分区,后使用内存的(看了很生气,有内存不用,反而使用磁盘中所划分出来 的虚拟内存,你说直接使用内存好,还是读取磁盘好,当然是直接读内存)


五、共享内存、cache、buffer

1、共享内存(shared memory)

对于共享内存(Shared memory ),主要用于在UNIX  环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣,请参考:What is Shared Memory?

2、
cache   buffer 的区别

(1)Cache


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

Cache 又分为一级Cache(L1 Cache) 和二级Cache(L2 Cache)
L1 Cache 集成在 CPU 内部
L2 Cache 早期一般是焊在主板上, 现在也都集成在CPU 内部,常见的容量有256KB512KB L2 Cache

(2)Buffer

名为缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
linux中使用free指令,那么Free
中的buffercache :(它们都是占用内存):
buffer : 
作为buffer cache 的内存,是块设备的读写缓冲区
cache: 
作为page cache 的内存 文件系统的cache

分享到:
评论

相关推荐

    linux-Linux性能优化实战案例

    在《Linux性能优化实战》案例中,我们深入探讨了如何利用Linux系统工具和技术来提升系统的运行效率和性能。Linux作为一款开源操作系统,其强大的可定制性和丰富的工具集使其成为性能优化的理想平台。以下是一些核心...

    嵌入式Linux内存与性能详解

    嵌入式Linux系统在各种设备和应用中广泛使用,其内存管理和性能优化是开发者面临的重要问题。本资源《嵌入式Linux内存与性能详解》详细阐述了这些关键领域,为理解嵌入式系统的内在机制提供了深入见解。 1. **...

    linux性能测试、内存优化资料集

    了解`/proc/meminfo`文件中各项指标的意义,有助于分析内存状态。`free`命令显示内存使用情况,`pmap`展示进程内存映射。避免内存泄漏,需要理解`malloc`和`calloc`等内存分配函数,以及如何使用`Valgrind`检测内存...

    嵌入式Linux内存使用与性能优化

    例如,/proc/meminfo提供实时内存状态,vmstat报告虚拟内存统计,top和htop展示进程资源使用情况,strace追踪系统调用,可以帮助定位内存问题。 综上所述,优化嵌入式Linux内存使用与性能需要深入理解内存模型、...

    linux文件管理器内存检测工具

    Linux中常用的内存检测工具包括`free`, `top`, `htop`, `vmstat`, 和 `smem`等。下面将详细介绍这些工具及其使用方法: 1. **`free`**:这是一个非常基础且简单的命令,用于显示系统的总内存、已用内存、空闲内存...

    嵌入式LINUX内存使用与性能优化高清电子书

    通过`top`、`free`、`vmstat`等命令可以监控内存状态,分析内存分配和回收的情况。 2. **进程内存优化**:每个进程都有自己的内存空间,包括堆(heap)、栈(stack)和数据段。优化包括减少栈空间使用,有效管理...

    linux性能监测小脚本

    这个"Linux性能监测小脚本"正为此目的而设计,它提供了简单易用的工具来监控关键系统指标。下面我们将深入探讨这个小脚本可能包含的功能以及其在Linux监控中的应用。 首先,`mynmonForAIX`可能是一个针对IBM AIX...

    Linux性能测试工具.docx

    这些工具通常从Linux的/proc虚拟目录获取实时运行状态信息,该目录提供了关于系统硬件、进程、内存等各方面的详细数据。以下是对几个常用性能测试工具的详细介绍: 1. **uptime** uptime命令提供了一个快速查看...

    Linux 性能监测工具及调优介绍

    本篇将详细介绍几种常用的Linux性能监测工具及其用途,帮助管理员更好地理解系统状态,及时发现并解决性能瓶颈。 1. **uptime** `uptime`命令提供了一个快速查看服务器运行状态的方法。它显示了系统运行的时间、...

    查看linux系统内存使用情况.pdf

    - **-s interval**: 持续输出内存状态,间隔时间为interval秒。 - **-t**: 显示总和行。 - **-V**: 显示版本信息。 - **--help**: 显示帮助信息。 ##### 1.2 输出解读 执行 `free -m` 命令后,通常会看到以下几行...

    Linux性能调优命令精华

    以上就是Linux性能调优中常用的一些命令,它们构成了系统管理员的工具箱,帮助我们理解和优化Linux系统的运行状态。通过对这些命令的深入理解和熟练运用,我们可以更好地管理和维护Linux环境,提升系统的整体性能。

    Linux高内存占用程序

    `ps`可以用来查看特定进程的资源使用情况,而`free`则显示系统当前的内存状态,包括总内存、已用内存、空闲内存和缓冲/缓存内存等。 当发现有程序内存占用过高时,我们可以通过以下步骤进行排查和优化: 1. **识别...

    内存泄露检测工具

    MEMWATCH还可以设置内存泄漏检查点,以便在程序运行到特定阶段时检查内存状态,找出可能的内存泄露点。 使用MEMWATCH的基本步骤包括: 1. 编译程序时链接MEMWATCH库。 2. 运行程序,MEMWATCH会自动开始跟踪内存操作...

    Linux下面向函数的动态内存泄漏监测.pdf

    论文介绍了在Linux操作系统中实现面向函数的内存泄漏检测的具体步骤和技术,包括重新定义内存管理函数,收集调用堆栈信息,以及如何在程序运行时实时监控内存状态。此外,文章还讨论了这种方法相对于传统内存泄漏...

Global site tag (gtag.js) - Google Analytics