zoukankan      html  css  js  c++  java
  • free内存监控

    语  法: free [-bkmotV][-s <间隔秒数>]

    补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

    参  数:

    -b  以Byte为单位显示内存使用情况。

    -k  以KB为单位显示内存使用情况。

    -m  以MB为单位显示内存使用情况。

    -o  不显示缓冲区调节列。

    -s<间隔秒数>  持续观察内存使用状况。

    -t  显示内存总和列。

    -V  显示版本信息。

    Mem:表示物理内存统计

    -/+ buffers/cached:表示物理内存的缓存统计

    Swap:表示硬盘上交换分区的使用情况

    第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等为第一行

    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.

    接下来解释什么时候内存会被交换,以及按什么方交换。

    当可用内存少于额定值的时候,就会开会进行交换,如何看额定值(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 ,你就可以明显的感觉到第二次的开打的速度快很多。

    实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。

    #free

    #man X

    #free

    #man X

    #free

    你可以先后比较一下free后显示buffers的大小。

    另一个实验:

    #free

    #ls /dev

    #free

    你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。

    因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)

    使用free命令

    将used的值减去   buffer和cache的值就是你当前真实内存使用 ————– 对操作系统 来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free只有16936 .

    对应用程序 来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为 了提高 程序执行的性能, 当程序使用内存时,buffer/cached会很快地被使用。 所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家 一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于 VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。 前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 记住内存是拿来用的,不是拿来看的. 不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换 文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换 空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看 内存是否够用的标准哦.

    [root@scs-2 tmp]# free

                 total       used       free     shared    buffers     cached

    Mem:       3266180    3250004      16176          0     110652    2668236

    -/+ buffers/cache:     471116    2795064

    Swap:      2048276      80160    1968116

    下面是对这些数值的解释:

    total:总计物理内存的大小。

    used:已使用多大。

    free:可用有多少。

    Shared:多个进程共享的内存总额。

    Buffers/cached:磁盘缓存的大小。

    第三行(-/+ buffers/cached):

    used:已使用多大。

    free:可用有多少。

    第四行就不多解释了。

    区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

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

    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

    如上例:

    2795064=16176+110652+2668236

    接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。

    如何看额定值:

    cat /proc/meminfo

    [root@scs-2 tmp]# cat /proc/meminfo

    MemTotal:      3266180 kB

    MemFree:         17456 kB

    Buffers:        111328 kB

    Cached:        2664024 kB

    SwapCached:          0 kB

    Active:         467236 kB

    Inactive:      2644928 kB

    HighTotal:           0 kB

    HighFree:            0 kB

    LowTotal:      3266180 kB

    LowFree:         17456 kB

    SwapTotal:     2048276 kB

    SwapFree:      1968116 kB

    Dirty:               8 kB

    Writeback:           0 kB

    Mapped:         345360 kB

    Slab:           112344 kB

    Committed_AS:   535292 kB

    PageTables:       2340 kB

    VmallocTotal: 536870911 kB

    VmallocUsed:    272696 kB

    VmallocChunk: 536598175 kB

    HugePages_Total:     0

    HugePages_Free:      0

    Hugepagesize:     2048 kB

    用free -m查看的结果:

    [root@scs-2 tmp]# free -m

                 total       used       free     shared    buffers     cached

    Mem:          3189       3173         16          0        107       2605

    -/+ buffers/cache:        460       2729

    Swap:         2000         78       1921

    查看/proc/kcore文件的大小(内存镜像):

    [root@scs-2 tmp]# ll -h /proc/kcore

    -r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore

    备注:

    占用内存的测量

    测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

    /proc/meminfo 机器的内存使用信息

    /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。

    /proc/pid/statm 进程所占用的内存

    [root@localhost ~]# cat /proc/self/statm

    654 57 44 0 0 334 0

    输出解释

    CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:

    参数 解释 /proc//status

    Size (pages) 任务虚拟地址空间的大小 VmSize/4

    Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4

    Shared(pages) 共享页数 0

    Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4

    Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4

    Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4

    dt(pages) 04

    查看机器可用内存

    /proc/28248/>free

    total used free shared buffers cached

    Mem: 1023788 926400 97388 0 134668 503688

    -/+ buffers/cache: 288044 735744

    Swap: 1959920 89608 1870312

    我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

    所以 空闲内存=free+buffers+cached=total-used

  • 相关阅读:
    Yield Usage Understanding
    Deadclock on calling async methond
    How to generate file name according to datetime in bat command
    Run Unit API Testing Which Was Distributed To Multiple Test Agents
    druid的关键参数+数据库连接池运行原理
    修改idea打开新窗口的默认配置
    spring boot -thymeleaf-url
    @pathvariable和@RequestParam的区别
    spring boot -thymeleaf-域对象操作
    spring boot -thymeleaf-遍历list和map
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11108986.html
Copyright © 2011-2022 走看看