free命令详解

工作机制:

Linux虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这块内存就可用于其它目的。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运行的那样快。虚拟内存的硬盘部分被称为交换空间。Linux系统常常动不动就使用交换空间,以保持尽可能多的空闲物理内存。即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间:当磁盘闲着,就可以提前做好交换。可以将交换空间分散在几个硬盘之上。针对相关磁盘的速度以及对磁盘的访问模式,这样做可以提高性能。

磁盘缓冲技术作用:一方面,被写入磁盘的数据常常会很快地又被读出,所以将要被写的数据放入缓冲中是个好主意。另一方面,通过将数据放入缓冲中,而不是将其立刻写入磁盘,程序可以加快运行的速度。以后,写的操作可以在后台完成,而不会拖延程序的执行。

free是系统自带的,常用的监控工具,用于显示已使用物理内存和交换空间,相对于top命令,free提供了更简洁的查看内存的使用情况。free命令由procps.*.rpm提供,free命令的所有输出值都是从/proc/meminfo中读出的:

[[email protected] ~]# cat /proc/meminfo
MemTotal:      8182340 kB
MemFree:       7541876 kB
Buffers:         28224 kB
Cached:         306136 kB
SwapCached:          0 kB
Active:         121164 kB
Inactive:       290056 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      8182340 kB
LowFree:       7541876 kB
SwapTotal:     4095992 kB
SwapFree:      4095992 kB
Dirty:              36 kB
Writeback:           0 kB
AnonPages:       76860 kB
Mapped:          27336 kB
Slab:           194132 kB
PageTables:       8032 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   8187160 kB
Committed_AS:  1254860 kB
VmallocTotal: 34359738367 kB
VmallocUsed:      2196 kB
VmallocChunk: 34359736151 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

命令详解:

# free -m
              total       used      free     shared    buffers     cached
Mem:          7990        625       7365      0        127          200
-/+ buffers/cache:        298       7692
Swap:         3999          0       3999

  • 第二行:Mem部分==>内存使用(系统级别)

total   内存总数  : 7990

used    已用内存数: 625   #系统级别总共内存使用数

free    空闲内存数: 7365  #系统级别纯粹空闲内存数

shared  共享内存数:0     #此项已废弃,一般为0

buffers 缓存内存数: 127   #预留给准备写入硬盘做的缓冲;

cached  缓存内存数: 200   #预留给以后使用的缓冲,该数据已经从硬盘中读取;

物理内存总共大小:

total(7990) = used(625) + free(7365) 

= used(-/+ buffers/cache) + free(-/+
buffers/cache)

系统实际分配内存大小:

Used(Mem)   = used(-/+ buffers/cache)+ buffers(Mem) + cached(Mem)

625         = 298 + 127 + 200

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.

  • 第三行:-/+buffers/cache部分==>内存使用(程序级别)

实际可用内存大小:  

free(-/+ buffers/cache)= free(Mem) + buffers(Mem) + cached(Mem);

7692                     = 7365      + 127          + 200

  • 第四行:Swap space部分==>交换空间(硬盘空间)

很好理解,故不做解释!

参数介绍:

free [-b|-k|-m|-g] [-l] [-o] [-t] [-sdelay ] [-c count]

-b, --bytes        #输出以比特方式显示
-k, --kb           #输出以KB方式显示,这是系统默认项
-m, --mb           #输出以MB方式显示,这是常用项,比较清晰
-g, --gb           #输出以GB方式显示
-l, --lowhigh      #显示详细信息
-o, --old          #旧格式显示,不显示-/+ buffers/cache项
-t, --total        #显示总共物理内存和交换区间
-c n, --count=n    #显示统计的次数,n默认为1 次
-s n, --repeat=n   #间隔秒数,持续观察内存使用情况
-V, --version      #显示版本信息
--help             #显示帮助信息

常用例子:

  • 例子1: 以KB,MB,GB的方式显示内存使用情况

# free -k
total used free shared buffers cached
Mem: 8027952 5323952 2704000 0 116876 1626940
-/+ buffers/cache: 3580136 4447816
Swap: 15624188 603792 15020396
# free -m
            total  used  free shared buffers cached
Mem:        7839   5197  2642 0      114     1588
-/+ buffers/cache: 3495  4344
Swap:       15257  589   14668
# free -g
             total used free shared buffers cached
Mem:           7   5    2    0      0       1
-/+ buffers/cache: 3    4
Swap:         14   0    14
  • 例子2: 显示物体内存、交换空间总的使用情况

# free -t
             total   used  free   shared buffers cached
Mem:         8027    5369  2658   0      117     1634
-/+ buffers/cache:   3617  4410
Swap:       15624    603   15020
Total:      23652    5972  17679

  • 例子3: 每隔1秒,显示内存输出情况
#free -k -s 1

total used free shared buffers cached
Mem: 8027952 5370220 2657732 0 117376 1635144
-/+ buffers/cache: 3617700 4410252
Swap: 15624188 603788 15020400 total used free shared buffers cached
Mem: 8027952 5367244 2660708 0 117392 1635272
-/+ buffers/cache: 3614580 4413372
Swap: 15624188 603788 15020400 total used free shared buffers cached
Mem: 8027952 5367556 2660396 0 117392 1635272
-/+ buffers/cache: 3614892 4413060
Swap: 15624188 603788 15020400 total used free shared buffers cached
Mem: 8027952 5367388 2660564 0 117392 1635272
-/+ buffers/cache: 3614724 4413228
Swap: 15624188 603788 15020400
  • 例子4: 持续监控内存输出情况
# watch -n 1 -d free
# -n 2         //-->统计2次
# -d           //-->difference
# watch free   //-->持续监控内存的使用情况

其他说明:

  • free, top命令,其中数据主要取自/proc目录,相关的目录文件:

/proc/meminfo    #机器的内存使用信息
/proc/pid/maps   #pid为进程号,显示当前进程所占用的虚拟地址。
/proc/kcore      #内存镜像文件
[[email protected] ~]# ll -h /proc/kcore
-r——– 1 root root 4.1G Jun 12 12:04 /proc/kcore
/proc/pid/statm  #进程所占用的内存
[[email protected] ~]# cat /proc/self/statm
654  57  44  0  0  334  0 
  • swap space配置问题
分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。 如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。因此Swap空间的分配是很重要的。

通常情况下,Swap空间的大小应是物理内存的2-2.5倍,最小不应小于64M。根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G以下的物理内存,配置2倍的swap,4G 以上配置1倍。

另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

free命令详解,布布扣,bubuko.com

时间: 2024-10-26 15:08:04

free命令详解的相关文章

jar打包命令详解

:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是说,制作一个可执行的 JAR 文件包,就可以像.chm 文档一样双击运行了:而另一种回答,则是使用 JET 来进行编译.但是 JET 是要用钱买的,而且,据说 JET 也不是能把所有的 Java 程序都编译成执行文件,性能也要打些折扣.所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性.先来看看什么是 JAR 文件包: 1. JAR 文件包 JAR 文件就是 Java Archi

Linux压缩与解压缩命令详解

简介:常用的压缩命令有gzip.bzip2.tar 提示:gzip与bzip2工具不可以对目录做打包压缩操作,gzip与bzip2解压都是用-d参数(decompress=uncompress) tar命令详解: 用法:tar 模式 [选项][路径]... 模式:    -c 创建打包文件 -delete -r --append -t --list内容 -x --extract 选项:    -C --directory -f 打包后的文件名称 -j bzip格式压缩 --remove-file

(转)Linux下PS命令详解

(转)Linux下PS命令详解 整理自:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=74654 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top 命令: (3) kill 用于杀死进程或者给进程发送信号: (4) 查看文章最后的man手册,可以查看ps的每项输出的含义

Linux上的free命令详解

Linux上的free命令详解 转自: http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html 解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1          2          3    

Find命令详解

find命令详解 格式 find pathname -options [ -print -exec -ok ... ] 功能 在磁盘中查找文件,并作相应处理 参数 pathname         所查找的目录,可以是相对/绝对路径 options -print 将结果输出到标准输出 -exec 'command' {} \; 对结果执行该参数所给的shell命令 -ok 与-exec作用相同,不过需要用户确认是否执行命令 -name 按照文件名查找 -perm [+-]mode 按照文件权限查

iftop命令命令详解

iftop命令命令详解 作者:尹正杰 在Linux命令中有很多内置命令,和外置命令,但是内部命令的功能毕竟是有限的,比如ifconfig,它就不能看到网卡流量的 实时发送情况,尽管咱们知道可以用watch命令去查看网卡的发送接收流量的情况,但是还是不够细致,因为它仅仅能看到我们的 接受和发送的总流量,因此,我们今天来介绍一个比较好使的实施查看网络流量信息的软件---iftop,其实他的工作模式和top很像. 废话不多说~让我们直接进入正题吧: 1.想必大家都会在linux命令行上敲击ifconf

linux yum命令详解

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至全部软件包的命令,而且命令简洁而又好记. yum的命令形式一般是如下:yum [options] [command] [package ...]其中的[opti

Linux上命令的使用格式和基础命令详解

一.Linux上命令的使用格式 命令行提示符详解: 用户通过终端的命令行接口来控制操作系统,登陆后如下: [[email protected] ~]# root: 当前登录的用户 @:分隔符 localhost: 当前主机的主机名,非完整格式:此处的完整格式为:localhost.localdomain [[email protected] ~]# hostname localhost.localdomain ~:用户当前所在的目录(current directory),也称为工作目录(work

scp命令详解

先说下常用的情况: 两台机器IP分别为:A.104.238.161.75,B.43.224.34.73. 在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录下,命令为:scp -r [email protected]:/home/lk /root. 具体过程为: [[email protected] ~]# scp -r [email protected]43.224.34.73:/home/lk /root [email protected]43.2

31个有用的系统管理员命令详解(linux)

在开始之前,你必须了解一下linux 基本知识: centos7目录结构.文件类型及权限.inode解析.信号 最常用的linux命令行快捷键.centos7 vi编辑器及环境变量的使用 Linux进程优先级及调度原理 1.Uptime 命令显示:运行时间.登陆用户数及1,5,15分钟间隔负载. # uptime 08:16:26 up 22 min,  1 user,  load average: 0.00, 0.03, 0.22 Uptime 命令仅有一个版本选项而且仅显示一天内的小时:分钟