ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2635|回复: 1

[调试优化] Linux性能监控分析调优05--free

[复制链接]
发表于 2013-5-20 13:15:44 | 显示全部楼层 |阅读模式
本帖最后由 黄振国 于 2013-5-21 18:05 编辑

命令:free
用途说明:free命令用来显示内存使用情况。

命令参数:
-b 以字节为单位显示。
-k 以K字节为单位显示。默认显示。
-m 以兆字节为单位显示。
-s <seconds> 每隔多少秒重复执行。可编写一个脚本用于监控。

Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。

第1行  Mem:
total:表示物理内存总量。
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,一般系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。
buffer 与cache 的区别见后面。

total = used + free   

第2行   -/+ buffers/cached:
used:也就是第一行中的used - buffers-cached  也是实际使用的内存总量。
free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

free 2= buffers1 + cached1 + free1   //free2为第二行、buffers1等为第一行
buffer 与cache 的区别:
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use

第3行:
第三行所指的是从应用程序角度来看,
对于应用程序来说,buffers/cached 是等于可用的,
因为buffer/cached是为了提高文件读取的性能,
当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.

第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。
这两个的区别在于使用的角度来看,
第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16936KB,已用内存是238332KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.

接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换.如何看额定值(RHEL4.0):
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数: 
1.减少缓冲与页面cache的大小,
2.将系统V类型的内存页面交换出去, 
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用swap是不是影响到系统性能的。

下面是buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.cached是用来给文件做缓冲。那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。

常用操作方式:
#按M为单位查看内存
free -m

#每10秒显示一次
free -s 10
回复

使用道具 举报

 楼主| 发表于 2013-5-20 13:32:20 | 显示全部楼层
[root@sunrise root]# free
                    total        used        free     shared    buffers     cached
Mem:       4091428    4073120      18308          0     112784    2564792
-/+ buffers/cache:    1395544    2695884
Swap:      8385888          0    8385888
[root@sunrise root]#

Mem开头的行:
total是指内存总数。比如这台机器4G内存,实际上已经扣除掉了作为显存的部分。
used是指操作系统已经使用的内存数。这部分既包括操作系统本身使用的部分,也包括应用程序已经使用的部分,还包括缓存的部分。
free是指操作系统还没有使用的内存数。我们通常看到这部分比较小。
shared已经废弃不用,总是显示0。
buffers和cached是指作为缓存的内存数。

-/+ buffers/cache开头的行:(重点看这行)
used列是指应用程序总共使用的内存数。等于Mem.used-Mem.buffers-Mem.cached。
free列是指应用程序还未使用的内存数。这个数据才是我们需要关注的空闲可用内存数。等于Mem.free+Mem.buffers+Mem.cached。
如果此行中free列的数据太小,那么就需要优化程序或者增加物理内存了。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 22:05 , Processed in 0.035567 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表