man free
可以得到详细的信息,这里贴个中文的,读起来快。
语 法:
free [-bkmotV][-s <
间隔秒数
>]
补充说明:
free
指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
参 数:
-b
以
Byte
为单位显示内存使用情况。
-k
以
KB
为单位显示内存使用情况。
-m
以
MB
为单位显示内存使用情况。
-o
不显示缓冲区调节列。
-s<
间隔秒数
>
持续观察内存使用状况。
-t
显示内存总和列。
-V
显示版本信息。
total used free shared buffers cached
Mem: 1022420 665104 357316 0 107012 278204
-/+ buffers/cache: 279888 742532
Swap: 1045500 223188 822312
total
物理内存总数
: 1022420
used
已经使用的内存数
: 665104
free
空闲的内存数
: 357316
shared
当前已经废弃不用,总是
0
buffers
即
Buffer Cache
内存数
: 107012
cached
即
Page Cache
内存数
: 278204
关系:
total = used + free
-buffers/cache
的内存数:
279888 (
等于第
1
行的
used -
buffers - cached),
实际上是应用程序所使用的内存。
+buffers/cache
的内存数
: 742532 (
等于第
1
行的
free + buffers + cached),
是对应用程序来说还剩余的内存。
可见
-buffers/cache
反映的是被程序实实在在吃掉的内存,而
+buffers/cache
反映的是可以挪用的内存总数。
对操作系统来讲
buffers/cached
都是属于被使用
,
所以它认为
free
只有
357316.
对应用程序来讲是
(-/+ buffers/cach).buffers/cached
是等同可用的,因为
buffer/cached
是为了提高程序执行的性能,当程序使用内存时,
buffer/cached
会很快地被使用。
-
第三行是交换分区
swap,
列出已使用、空闲的
swap.
SWAP
就是
LINUX
下的虚拟内存分区
,
它的作用是在物理内存使用完之后
,
将磁盘空间
(
也就是
SWAP
分区
)
虚拟成内存来使用。
Swap
空间的作用可简单描述为:当系统的
物理内存
不
够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的
空间被临时保存到
Swap
空间中,等到那些程序要运行时,再从
Swap
中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行
Swap
交换
-
那
buffers
和
cached
都是缓存,两者有什么区别呢?
为了提高磁盘存取效率
, Linux
做了一些精心的设计
,
除了对
dentry
进行缓存
(
用于
VFS,
加速文件路径名到
inode
的转换
),
还采取了两种主要
Cache
方式:
Buffer Cache
和
Page Cache
。前者针对磁盘块的读写,后者针对文件
inode
的读写。这些
Cache
有效缩短了
I/O
系统调用
(
比如
read,write,getdents)
的时间。
磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种
Cache
就是分别缓存逻辑和物理级数据的。
Page cache
实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到
page cache
。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当
page cache
的数据需要刷新时,
page cache
中的数据交给
buffer cache
,因为
Buffer Cache
就是缓存磁盘块的。但是这种处理在
2.6
版本的内核之后就变的很简单了,没有真正意义上的
cache
操作。
Buffer cache
是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到
buffer cache
中,例如,文件系统的元数据都会缓存到
buffer cache
中。
简单说来,
page cache
用来缓存文件数据,
buffer cache
用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到
page cache
,如果直接采用
dd
等工具对磁盘进行读写,那么数据会缓存到
buffer cache
。
所以我们看
linux,
只要不用
swap
的交换空间
,
就不用担心自己的内存太少
.
如果常常
swap
用很多
,
可能你就要考虑加物理内存了
.
这也是
linux
看内存是否够用的标准
.
如果是应用服务器的话,一般只看第二行,
+buffers/cache,
即对应用程序来说
free
的内存太少了,也是该考虑优化程序或加内存了。
想起来记录
free
的一些东西,缘由是某
java
应用
crash
了,从
crashlog
中看到
crash
时,物理内存剩下仅十几
M
,出错的点是
jvm
内部
malloc
失败,估计很可能是内存不够用导致。于是想了解下内存相关的一些信息,
crash log
中输出的内容和
free
命令中输出的第二行结果是一致的。因此想了就关注了
free
这个命令输出的一些信息解释。现在看来,上面的推测可能成立,但是还缺少一些依据,需要当时场景的更多信息才能判断出是不是这个原因。
内容参考下面链接汇总而成。
http://www.linuxso.com/command/free.html
http://baike.baidu.com/view/418446.htm
http://www.ddvip.com/mc/os/linux/1413.html
分享到:
相关推荐
linux简介 官方 linux简介 官方 linux简介 官方
Linux VNC-Server-6.2.0-Linux-x64.rpm下载,64位版本
It includes the GNU Compiler (GCC) and is available free of charge directly from Arm for embedded software development on Windows, Linux and Mac OS X operating systems. Follow the links on this page ...
freeradius-3.0.22 Windows版,64位
Linus Toravlads_en文章a free Unix-386 kernel
free-idea-mybatis是一个提高mybatis编码的插件。实现了dao代码跳转到mapper,mapper跳转回dao,mapper文件、statement查询自动生成功能。这里提供两个版本free-idea-mybatis-2019.12.18 和free-idea-mybatis-2018....
greeRadius 源代码 很有价值的源码可以好好看看 理解其内涵
free-idea-mybatis is an enchange plugin for idea to supoort mybatis,here is the main functions: generate mapper xml files navigate from the code to mapper and from the mapper back to code auto code...
最新稳定版本freeradius-server-2.2.0.tar.gz。更多详细开发信息可参考网站http://freeradius.org/。网站作者很好,有开发问题可以给他发邮件,不过要英文的,一般都会恢复。不过发邮件前最好先查看他们的邮箱列表,...
解释一下Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1 2 ...
FreeModbus--RTU--Master+Slave--uCOSIII--STM32F407工具.rar
idea free-idea-mybatis-2019.12.18插件(原文件名已存在,则换了个资源名),直接下载解压即可
epd_free-7.3-2-win-x86.msi epd_free-7.3-2-win-x86.msi epd_free-7.3-2-win-x86.msi
Freemodbus-笔记,每个流程状态图很清晰,各个状态准换清晰流程图说明,网络整理,侵权联系删除,积分系统自定义的
freeradius-server-2.2.0官方源码,linux版本,支持JRadius。
Freeman-Durden极化分解代码
FreeRADIUS-server-2.2.0-x86.zip Windows安装文件,适用于32位或64位操作系统;自己在开发中使用
FreeMind-Windows-Installer-0.9.0_RC_1-max.exe 思维导图软件最新,java的开源的免费的
该文件包含了的C语言标准库函数的定义,常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 1 Linux-Socket-服务器编程实例全文共13页,当前为第2页。 ...
Linux系统命令源码包,包含Top,Free,ps,kill等命令