zoukankan      html  css  js  c++  java
  • linux内存使用率详解

    free命令结果如下:

    i2000:~ # free
                 total       used       free     shared    buffers     cached
    Mem:      24157516   23714828     442688    7100040     881324   18425668
    -/+ buffers/cache:    4407836   19749680
    Swap:     12583332     178792   12404540
    

      

    第一行 (可以理解为从操作系统的角度来看内存分配)

       

    total

    总物理内存大小。

    used

    已分配的大小,注意,对操作系统来说任何被使用的内存都是used。

    free

    未被分配的物理内存大小。

    shared

    共享内存大小,主要用于进程间通信,例如Oracle会使用上GB的共享内存。

    buffers

    主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。

    cached

    主要用于文件内容缓冲

    # 这里补充一下关于文件系统的常识 ^_^

    # 文件系统实际上可以粗略的划分为两个部分:

    # (1)metadata:即通常说的元数据,包括目录结构、文件的名字、大小、修改时间、权限等等信息。

    # (2)filedata:即文件中真正存储的内容。

    # 由于计算机中各个部件之间的速度相差很大,通常情况下CPU的cache最快,其次是内存,最慢的自然就是硬盘等外部设备了。

    # 而越慢的设备越廉价,所以硬盘就被用来存储大量数据(有一天内存不要钱了大家就不用在被buffer、cache这个东东折磨了 <( ̄︶ ̄)>)。

    # 所以,文件系统就被放在了硬盘上(不可避免的悲剧~~)。但是由于硬盘速度实在太慢了,为了改善IO性能,最终就诞生了"缓存"这一概念。

    # "缓存"实际上就是在内存中划分一块区域作为硬盘和进程之间的缓冲区域,写进程把数据写到这里然后就干其他事情去了,读进程需要时先在这里找,找不到再去找硬盘,这样就大大提高了读写效率,同时缩短了IO等待时间,否则你在linux上运行man iptables 这样的命令的时候每次都会等N久。。。

    # 这里还有一个"物理内存"和"虚拟内存"的概念,这个概念比较难讲,大家去google一些大牛的帖子看吧,涉及的东西太多了。。。。

       

    所以,这里,buffer实际上是用来存储了文件系统的元数据(这样我们每次ls就会很快了 ^_^),而cache则缓存了近期读写过的文件的内容(第一次读文件会很慢,以后就会很快,就是因为有cache的存在),把这个理解了free命令就理解了大半了。

      

    第二行 (可以理解为从应用程序的角度来看内存分配)

       

    -/+ buffers/cached: 22556 102232

    这里的 -/+ 实际上分别指的是 - buffers/cached 和 + buffers/cached 两个部分。

       

    - buffers/cached

    = used(第一行) - buffers - cached

    实际上是程序当前"真实使用"的"物理内存"的大小。

    + buffers/cached

    = buffers + cached

    两个加起来可以理解为"暂时借给"系统作为"缓冲区"使用的内存大小。

       

    大家做一下简单的加减法就清楚了:

    从应用多角度来说,实际上系统还可以分配给他的内存有这么多:11356(free) + 15308(buffers) + 75568(cached)= 102232(free)

    而系统所拥有的总的物理内存大小 113432 = 22556( - buffers/cached) + 102232 (+ buffers/cached)

       

    所以,第一行的数据实际上是从操作系统角度来看的。

    对于操作系统来说已分配的内存表示已经被某些数据所占据了,但是具体这些数数据是用来做什么的他不会去理会。

    实际上正如前面所说,这部分物理内存被拿来做"缓存"了。

    shell脚本为:

    #!/bin/bash
    
    
    #from os view
    os_used=$(free | grep "Mem" | awk '{print $3}')
    total=$(free | grep "Mem" | awk '{print $2}')
    os_rate=$(echo "scale=4;$os_used/$total"|bc)
    percent_part1=$(echo $os_rate | cut -c 2-3)
    percent_part2=$(echo $os_rate | cut -c 4-5)
    echo "Operation system memery is already use: $percent_part1.$percent_part2%"
    
    #from user view
    user_free_tmp=$(free | grep "Mem:" | awk '{print $4 " " $6 " " $7}')
    user_free=$(echo $user_free_tmp | awk '{print $1+$2+$3}')
    user_used=`expr $total - $user_free`
    user_rate=$(echo "scale=4;$user_used/$total"|bc)
    part1=$(echo $user_rate | cut -c 2-3)
    part2=$(echo $user_rate | cut -c 4-5)
    echo "User system memery is already use: $part1.$part2%"
    

      

    我可能什么都想要
  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/mengwenlu/p/4794743.html
Copyright © 2011-2022 走看看