linux内存布局(free、meminfo、statuc、maps、smaps)

linux的内存,分为三个层次分析,分别是OS系统内存、进程内存以及目标文件,以下将对这三个层次逐步记录

目标文件相关,在我的另一篇博客:https://blog.csdn.net/qq_21331015/article/details/103210449


OS系统内存

free

                    total       used         free     shared    buffers     cached
Mem:         37176       33136       4040       2124       1544       8660
-/+ buffers/cache:      22932      14244
Swap:            0          0          0
Mem行:
Total—总已安装内存(来源于/proc/meminfo中)
Used—使用内存(total - free)
Free—未使用的内存(来源于/proc/meminfo中)
Shared--tmpfs(主要)使用的内存(来源于/proc/meminfo中的Shmem ,在内核2.6.32上可用,如果不可用,则显示为0)
Buffers--内核缓冲区使用的内存(来源于/proc/meminfo中的 Buffers)------写
cache--页面缓存 (来源于/proc/meminfo中的Cached,man的描述还有slab,但是实际效果里没有)----读
-/+ buffers/cache行: 第一行(+/-) buffers和cache
Swap行:
Total-- 交换分区总内存(SwapTotal in /proc/meminfo)
Used-- 交换分区已使用内存(total – free)
Free--未使用的内存(来源于/proc/meminfo中)

总之,free里的所有信息,在meminfo里都可以找到

Meminfo

MemTotal:             37176 kB    总可用内存(划分给OS的内存 - 内核保留部分)
MemFree:             828 kB    未使用的内存
MemAvailable:      10312 kB      估算在准备启动一个新程序时所需要的可用内存的,不包括交换区。
在不引起交换的情况下,估计可用于用户空间分配的内存量。在系统开始交换之前,空闲内存不能低于低水印。
不是所有的页面缓存都可以被释放,否则系统将开始交换。假设至少有一半的页面缓存,或者缓存的低水印值需要保留。
可回收交换的一部分由正在使用的且不能被释放的项组成。将此估计限制在低水印处。
= MemFree - wmark_low + Active(file) + Inactive(file)  -  min((Active(file) + Inactive(file) )/ 2, wmark_low) + 
SReclaimable - min(SReclaimable / 2, wmark_low)
Buffers:             1840 kB     block device 文件读写用到的page
Cached:            12080 kB    普通文件占用的缓冲
SwapCached:            0 kB    确定要swapping换页、但是尚未写入物理交换区的匿名内存页
Active:               17976 kB    Active(anon) + Active(file)
Inactive:             8056 kB    Inactive(anon) + Inactive(file)
Active(anon):      12884 kB    活跃的匿名内存(堆、栈等)
Inactive(anon):     3756 kB
Active(file):         5092 kB    活跃的映射内存(代码段、只读段)
Inactive(anon):     3756 kB
Active(file):       5092 kB    活跃的映射内存(代码段、只读段)
Inactive(file):     4300 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB    
AnonPages:         12128 kB    
Mapped:             7440 kB    
Shmem:              4528 kB     tmpfs所使用的内存,buffers + cached = Active(file) + Inactive(file) + Shmem
Slab:               3988 kB    内核数据结构slab的大小,可以减少申请和释放内存带来的消耗。
SReclaimable:        620 kB    可收回Slab的大小
SUnreclaim:         3368 kB    不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack:         904 kB    内核栈
PageTables:          444 kB    页表,用于存储各个用户进程的逻辑地址和物理地址的变换关系。

内存使用的压力

内存使用压力?Linux内核使用水位标记(watermark)的概念来描述这个压力情况。Linux为内存的使用设置了三种内 存水位标记,high、low、min。他们所标记的分别含义为:
剩余内存在high以上表示内存剩余较多,目前内存使用压力不大;
high-low的范 围表示目前剩余内存存在一定压力;
low-min表示内存开始有较大使用压力,剩余内存不多了;
min是最小的水位标记,当剩余内存达到这个状态时,就说 明内存面临很大压力。
小于min这部分内存,内核是保留给特定情况下使用的,一般不会分配。内存回收行为就是基于剩余内存的水位标记进行决策的

        当系统剩余内存低于watermark[low]的时候,内核的kswapd开始起作用,进行内存回收。直到剩余内存达到watermark[high]的 时候停止。如果内存消耗导致剩余内存达到了或超过了watermark[min]时,就会触发直接回收(direct reclaim)。

查看水位:
cat /proc/zoneinfo


进程内存

status表示进程整体状态:命令:cat /proc/进程号/status

Name: 进程名
Umask:权限掩码(目录:777-022=755,文件:666-022=644)
State:进程状态
Tgid:线程组的ID
Pid: 进程ID,也是主线程ID
PPid:  父进程ID
TracerPid:跟踪当前进程的进程ID,如果是0,表示没有跟踪.(如strace跟踪)
。。。
VmPeak:代表当前进程运行过程中占用虚拟内存的峰值.
VmSize:代表进程现在正在占用的虚拟内存
VmLck: 代表进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘.
VmHWM:程序得到分配到物理内存的峰值.
VmRSS:程序现在使用的物理内存.
RssAnon:匿名内存占用的物理内存
RssFile:文件交换占用的物理内存
VmData:表示进程数据段的虚拟内存.
VmStk:表示进程栈的虚拟内存.
VmExe:表示进程代码的虚拟内存.
VmLib:表示进程所使用LIB库的虚拟内存
。。。

maps表:cat /proc/进程号/maps

分为六列:

第一列:虚拟内存的占用空间

第二列:权限

第三列:此部分在文件中的偏移,如果不是从文件中映射而来,则为0

第四列:设备号

第五列:inode节点

第六列:此段的简要描述

smaps表:cat /proc/进程号/smaps (查看我的另一篇博客)

https://blog.csdn.net/qq_21331015/article/details/99302523


全局变量怎么找

1、通过段表找到bss段即data

2、在符号表中,虚拟地址在bss及data范围内的符号,即是全局变量

段表及符号表的相关知识,查看我的另一篇博客:

https://blog.csdn.net/qq_21331015/article/details/103210449

 

                    

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值