每天一个linux命令(35)--free命令
free命令可以显示Linux系统中空闲的、易用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free 命令是最经常使用的命令之一。
1.命令格式:
free [参数]
2.命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存,共享内存将被忽略
3.命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
4.使用实例:
实例1:显示内存使用情况
命令:free
free -g
free -m
说明: total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
shared:多个进程共享的内存总额。
buffers/cached:磁盘缓存的大小。
第二行(mem),这是从OS的角度来看,对于OS而言,buffers/cached 都是属于被使用的,所以OS可用的内存是不包括这些的。内核(OS)+application(X, ORACLE)使用的+buffers/cached=内存大小。
第三行(-/+ buffers/cached),这个是从应用程序角度来看的,对于应用程序而言,buffers/cached 是等于可用的,因为buffers/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffers/cached会很快的被回收。
所以从应用程序的角度来说,可用内存=系统 free memory+buffers+cached.
第四行是交换内存swap。---为什么会交换,按什么方式交换?
当内存少于额定值的时候,就会开始进行交换,如何看额定值?
命令: cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数:
1.减少缓冲与页面cache 的大小
2.将系统V类型的内存页面交换出去
3.换出或者丢弃页面,(application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用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 的内存太少了,也是该考虑优化程序或加内存了。
实例2:以总和的形式显示内存的使用信息
命令: free -t
实例3:周期性的查询内存使用信息
命令: free -s 10 没10秒执行一次。
每天一个linux命令(35)--free命令的更多相关文章
- 每天一个linux命令(46):vmstat命令
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深 ...
- 每天一个linux命令目录
出处:http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每天一个命令,所以这个系列为每 ...
- 每天一个linux命令(44):top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...
- 每天一个linux命令(42):kill命令
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...
- 每天一个linux命令(36):top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是 一个动态显示过程,即可以通过用户按键来不断刷 ...
- 每天一个linux命令(34):kill命令
Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以 使用Ctrl+C键,但是,对于一个后台进程 ...
- 每天一个linux命令-转载
每天一个linux命令目录 转载自: http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令 ...
- [转]每天一个linux命令目录
[转]每天一个linux命令目录 http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令,坚持每 ...
- 每天一个linux命令(56)--crontab命令
上一节学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,Linux 系统则是由 cron(crond)这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
随机推荐
- [转python 父类可以调用子类的方法
问题描述:我也是在读500 Line 里满的DBDB 的代码时发现的,python的父类可以调用子类的方法,这跟平常习惯的理解方式很不一样,所以就查了下原因,记录如下: 1.现象:最近使用到了So ...
- contextMenu,右键菜单
<!DOCTYPE html> <html> <head> <title>ContextMenu Event Example</title> ...
- xdebug.var_display_max_data
Xdebug Display Full Details on var_dump() Xdebug is an excellent addition to a PHP developers arsena ...
- iOS 之 WebView 简单使用
1. 代理 UIWebViewDelegate 2. 创建 UIWebView myWebView=[[UIWebView alloc] initWithFrame:CGRectMake(, ,sel ...
- iOS 添加导航栏两侧按钮
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"首页" style ...
- webstorm常用快捷键及插件
子曰:工欲善其事,必先利其器.那么问题来了,前端开发用什么比较好? 我反正用的是webstorm,之前也花了一些时间看看别人的使用方式.下面分类介绍一下. 常用快捷键: double shift : ...
- Angular - - ngIf、ngSwitch、ngHide/ngShow
在组合这些ng指令写到一篇文章里的时候,基本是有规则的,野兽把功能相似相近的一类大多会组合到一起,方便理解和记忆. 这篇的三个指令也都是对DOM元素的操作,页面上显示/隐藏的判断,添加/移除的判断. ...
- C标准I/O建立一个文件仓库
实现了 增删改查 创建了一个结构体 保存 num name cout price 代码 #include<stdio.h>#include<string.h>#include& ...
- Intent对象详解——使用Intent启动系统组件
Android的应用程序包含三种重要组件:Activity.Service.BroadcastReceiver,应用程序采用一致的方式来启动它们——都是依靠Intent来启动的,Intent就封装了程 ...
- List与Linkedlist、Arrylist、Vector、Map应用
1.List与LinkedList List是数组链表 LinkedList是指针链表 选择List还是LinkedList要看你的使用特点. 数组链表访问快,复 ...