Linux下内存的管理

linux的内存管理这块一直是有点迷糊的,在这里单独开辟一个专题,用于记录对于Linux内存管理的相关内容:

1、先来看一个关于内存使用率的问题。某个系统负责人问我通过free -m看到的内存,其中used部分都包含哪些内容,这块可没想象的那么简单,如果有人跟你三两句话就说完了,那么记住他一定是个骗子:

***************
先来看实际问题
***************
[root@jfsh-qqzs-db1 tmp]# free -m total used free shared buffers cached Mem: 128948 128014 934 0 188 21588 -/+ buffers/cache: 106236 22711 Swap: 131071 20 131051 [root@jfsh-qqzs-db1 tmp]#

通过查询资料可以知道used部分可以用这三部分来概括:rss(进程消耗)+pagetable(pagetable消耗)+slabinfo(slab消耗)

***************
通过计算发现实际计算的结果与预计不相符
***************
以下为计算的脚本:
  • #/bin/bash
    for PROC in `ls /proc/|grep "^[0-9]"`
    do
    if [ -f /proc/$PROC/statm ]; then
    TEP=`cat /proc/$PROC/statm | awk '{print ($2)}'`
    RSS=`expr $RSS + $TEP`
    fi
    done
    RSS=`expr $RSS \* 4`
    PageTable=`grep PageTables /proc/meminfo | awk '{print $2}'`
    SlabInfo=`cat /proc/slabinfo |awk 'BEGIN{sum=0;}{sum=sum+$3*$4;}END{print sum/1024/1024}'`

    echo $RSS"KB", $PageTable"KB", $SlabInfo"MB"
    printf "rss+pagetable+slabinfo=%sMB\n" `echo $RSS/1024 + $PageTable/1024 + $SlabInfo|bc`
    free -m

以下为计算的结果:

  • 5316416KB, 83988KB, 367.249MB
    rss+pagetable+slabinfo=5640.249MB
    total used free shared buffers cached
    Mem: 128948 128015 933 0 184 21563
    -/+ buffers/cache: 106266 22681 
    Swap: 131071 20 131051

从计算的结果来看,三者的加和并不等于内存used部分,这是为什么的?通过进一步查询相关资料以及检查脚本,怀疑是系统配置了大页导致的计算结果与实际有出入。那接下来看下大页!

 

 

2、有关于大页:刚入行的时候,

 

posted @ 2019-08-12 10:15  dayu.liu  阅读(217)  评论(0编辑  收藏  举报