`
javathinker
  • 浏览: 235475 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Linux free -m 详细说明

 
阅读更多
linux内存中buffer与cache的区别
  free 命令相对于top 提供了更简洁的查看系统内存使用情况:
$ free
total<wbr><wbr><wbr><wbr><wbr><wbr>used<wbr><wbr><wbr><wbr><wbr><wbr><wbr>free<wbr><wbr><wbr>shared buffers cached<br> Mem:<wbr><wbr><wbr>255268<wbr><wbr><wbr><wbr><wbr>238332<wbr><wbr><wbr><wbr><wbr>16936<wbr><wbr><wbr><wbr><wbr><wbr>0<wbr><wbr>85540<wbr><wbr>126384<br> -/+ buffers/cache: 26408<wbr><wbr><wbr><wbr><wbr><wbr>228860<br> Swap:<wbr><wbr>265000<wbr><wbr><wbr><wbr><wbr>0<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>265000</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
  total1:<wbr><wbr><wbr>表示物理内存总量。<br> used1:<wbr><wbr><wbr><wbr>表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。<br> free1:<wbr><wbr><wbr><wbr>未被分配的内存。<br> shared1:<wbr><wbr>共享内存,一般系统不会用到,这里也不讨论。<br> buffers1: 系统分配但未被使用的buffers 数量。<br> cached1:<wbr><wbr>系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
used2:<wbr><wbr><wbr><wbr>实际使用的buffers 与cache 总量,也是实际使用的内存总量。<br> free2:<wbr><wbr><wbr><wbr>未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1<wbr><wbr>= buffers1 + cached1 + used2<br> free2<wbr><wbr>= buffers1 + cached1 + free1</wbr></wbr></wbr></wbr>
  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.
  更详细的解释参考:Difference Between Buffer and Cache
对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣, 请参考:What is Shared Memory?
  cache 和 buffer的区别:
Cache: 高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周 期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提 高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
  Free中的buffer和cache:(它们都是占用内存):
buffer: 作为buffer cache的内存,是设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
  如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。
Buffer和Cache的区别
<wbr><wbr><wbr>缓存(cached)是<strong><span style="color:#0000FF; word-wrap:normal; word-break:normal">把读取过的数据</span></strong>保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。</wbr></wbr></wbr>
<wbr><wbr><wbr>缓冲(buffers)是根据<strong><span style="color:#0000FF; word-wrap:normal; word-break:normal">磁盘的读写</span></strong>设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的 灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。</wbr></wbr></wbr>

修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。
两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
buffer是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。

Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小,以及如何分配这个问题,在Linux大家就不用再吵什么swap大小的问题,我个人认为,swap设个512M已经足够了,如果你问说512M的SWAP不够用怎么办?只能说大哥你还是加内存吧,要不就检查你的应用,是不是真的出现了memory leak.

在Linux下查看内存我们一般用command free
[root@nonamelinux ~]# free
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>total<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>used<wbr><wbr><wbr><wbr><wbr><wbr>free<wbr><wbr><wbr><wbr>shared<wbr><wbr><wbr>buffers<wbr><wbr><wbr><wbr>cached<br> Mem:<wbr><wbr><wbr>386024<wbr><wbr><wbr><wbr><wbr><span style="word-wrap:normal; word-break:normal; background-color:rgb(111,168,220)"><span style="color:#00FF00; word-wrap:normal; word-break:normal">377116</span></span><wbr><wbr><wbr><wbr><span style="color:#0000FF; word-wrap:normal; word-break:normal; background-color:rgb(255,0,255)"><strong>8908<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong><span style="color:#000000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,255)">0<wbr><wbr><wbr></wbr></wbr></wbr></span><strong><wbr><wbr><wbr><wbr><wbr><wbr><wbr>21280<wbr><wbr><wbr><wbr>155468<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong></span>-/+ buffers/cache:<wbr><wbr><wbr><wbr>200368<wbr><wbr><wbr><span style="color:#FF0000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,0)"><strong>185656</strong></span><br> Swap:<wbr><wbr><wbr>393552<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>393552<br> 下面是对这些数值的解释:<br> 第二行(mem):<br> total:总计物理内存的大小。<br> used:已使用多大。<br> free:可用有多少。<br> Shared:多个进程共享的内存总额。<br> Buffers/cached:磁盘缓存的大小。<br> 第三行(-/+ buffers/cached):<br> used:已使用多大。<br> free:可用有多少。<br> 第四行就不多解释了。<br> 区别:<br> 第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。<br> 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.<br> 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。<br> 所以从应用程序的角度来说,可用内存=系统free( memory+buffers+cached.)<br> 如上例:<br><strong><span style="color:#0000FF; word-wrap:normal; word-break:normal; background-color:rgb(255,0,255)"><span style="color:#FF0000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,0)">185656</span><span style="color:#000000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,255)">=</span>8908+21280+155468</span></strong><br> 接下来解释什么时候内存会被交换,以及按什么方交换。<br> 当可用内存少于额定值的时候,就会开会进行交换.<br> 如何看额定值(RHEL4.0):<br> #cat /proc/meminfo<br> 交换将通过三个途径来减少系统中使用的物理页面的个数: <br> 1.减少缓冲与页面cache的大小,<br> 2.将系统V类型的内存页面交换出去, <br> 3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。<br> 事实上,少量地使用swap是不是影响到系统性能的。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    Linux free命令用法详解

    Linux free命令 Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 语法free [-bkmotV][-s ] 参数说明: -b 以Byte...

    onnxruntime-1.14.1-cp37-cp37m-linux_armv7l.whl.zip

    标题中的“onnxruntime-1.14.1-cp37-cp37m-linux_armv7l.whl.zip”表明我们正在处理一个与ONNX Runtime相关的软件包,版本为1.14.1,适用于Python 3.7(cp37表示Python的兼容性标识),且是为Linux ARMv7架构(通常...

    free命令详解

    `free`命令是Linux系统中一个非常重要的工具,用于报告系统中物理内存、虚拟内存的使用情况。它可以帮助用户了解系统的内存使用状态,判断系统是否存在内存瓶颈等问题。 #### 命令语法 ```sh free [-bkmotV] [-s ...

    Linux一句话精彩问答

    - **命令**: `uname -a`、`cat /proc/cpuinfo`、`free -m`等。 - **说明**: 查看系统内核版本、CPU信息、内存使用情况等。 #### 23. 去除多余的回车符 - **命令**: `sed 's/^M$//' 文件名`。 - **说明**: 使用`sed`...

    LINUX常用命令-很全的LINUX命令

    以下是一些重要的Linux命令及其详细说明: 1. **`scp`**:从其他机器拷贝文件或文件夹。`scp`是Secure Copy的缩写,用于在不同主机间安全地传输文件。例如,`scp user@remote_host:/path/to/file /local/path/`将...

    linux硬件查看.txt

    根据提供的文件信息,我们可以归纳出一系列与Linux系统硬件检测相关的知识点。这些知识点涵盖了从基本的硬件信息查询到更深入...这些命令可以帮助用户详细了解Linux系统的硬件配置,便于进行故障排除、性能优化等工作。

    linux总结 解决常见应用问题

    - **说明**:使用`free -Cm`命令查看系统的内存使用情况,其中`-C`表示以百分比形式显示,`-m`表示以MB为单位显示。 ##### 14. 更改运行级别 - **场景**:当需要临时更改系统的运行级别时。 - **命令**: ```bash...

    通过命令行管理Linux系统

    free -m ``` - **说明**:使用`free`命令查看内存使用情况。 ##### 操作12:文件打包与压缩 - **命令**: ```bash tar -czvf test.tar.gz test tar -xzvf test.tar.gz -C /tmp ``` - **说明**:使用`tar`...

    Linux必学的系统管理命令.doc

    本文将详细介绍两个常用的命令:df和top,以及另一个与内存管理相关的命令free。 1. **df** - **作用**:df命令主要用于查看文件系统的磁盘空间占用情况,它可以帮助系统管理员监控磁盘空间的使用状态,以便及时...

    linux-shell编程

    /usr/bin/free -m &gt;&gt; /tmp/sysinfo echo &gt;&gt; /tmp/sysinfo writeroot /usr/bin/writeroot crontab -e 0 9 * * 1-5 /bin/sh /script ``` 这段脚本使用了 cron 守护进程来定时执行脚本,每天早上 9 点会自动收集...

    运维工程师必会的109个Linux命令

    - `-v` 或 `--show-nonprinting`:使用 `^` 和 `M-` 符号显示不可打印字符。 3. **cd** - **功能说明**:改变当前工作目录到指定的目录。 4. **chgrp** - **功能说明**:更改文件或目录的所属组。 5. **chmod*...

    Linux系统管理命令使用说明.docx

    Linux系统管理是运维人员日常工作中不可或缺的部分,其中包含了许多实用的命令行工具,例如`shutdown`、`free`和`top`。这些命令用于监控和管理Linux系统的状态,包括系统的关机、重启、内存使用情况以及实时进程...

    linux运维常用命令

    本文总结了 20 个常用的 Linux 运维命令,每个命令都附带了详细的说明和用途。 1. 删除 0 字节文件 命令:find -type f -size 0 -exec rm -rf {} \; 说明:该命令可以删除 Linux 系统中的 0 字节文件,-type f 选项...

    linux命令大全

    - **补充说明**:`finger`命令可以显示关于用户的详细信息,包括登录时间、空闲时间等。 - **选项**: - `-l`:列出所有用户。 - `-m`:显示邮件状态。 - **示例**:查看用户`user1`的信息。 ```bash finger ...

    linux 中常用命令及说明.docx

    ### Linux 中常用命令及说明 #### 一、文件管理命令 **1. ls 命令** - **功能**: `ls` 命令用于列出当前目录下的文件和目录。 - **常用选项**: - `-l`: 显示详细列表模式,包括文件权限、链接数、拥有者、大小和...

    linux操作系统实验七-Linux存储管理操作实践.pdf

    以下是对这些命令的详细说明: 1. **`free`命令**:这个命令用于查看系统内存的使用情况,包括物理内存、交换内存等。`-b`、`-k`、`-m`和`-g`参数分别以字节、千字节、兆字节和吉字节为单位显示,`-l`显示详细的...

    张浩Linux操作系统巡检报告

    本巡检报告针对的是张浩Linux操作系统的详细检查与评估,旨在为维护人员提供专业的指导与建议,确保系统的稳定性和安全性。 #### 二、硬件检测 **硬件机型**:DL580 - **说明**:服务器型号为DL580,这是一款高...

    linux必学的60个命令

    本篇文章将详细介绍Linux系统中最常用的60个命令,这些命令被分为六个类别:安装和登录命令、文件处理命令、系统管理相关命令、网络操作命令、系统安全相关命令以及其他命令。通过学习这些命令,您可以更好地理解和...

    linux指令快速查找手册

    3. **功能说明**:详细介绍命令的功能。 4. **参数说明**:列出命令可接受的参数及其作用。分为必要参数(必须使用)和选择性参数(辅助性参数)。 5. **执行范例**:通过实例展示命令的具体应用。 6. **相关指令**...

    Linux 常用 命令

    本文将详细介绍一些常用的Linux命令及其使用方法。 ##### 1. `ls` `ls` 命令用于列出目录中的文件和子目录列表。默认情况下,它会列出当前目录下的内容。可以通过添加选项来改变其行为,例如 `-l` 显示详细信息,`-...

Global site tag (gtag.js) - Google Analytics