内存相关概念
-
虚拟内存:是一个逻辑概念,目的是为了便于程序的使用和系统的管理,虚拟内存会与物理内存形成映射关系
-
常驻内存:当前处于主存中的内存
-
匿名内存:无文件系统位置或者路径名的内存,进程堆和栈空间的内存都属于匿名内存(文件之外分配使用的内存)
- 参考:https://www.jianshu.com/p/84d6d5c75c02
-
分页:虚拟内存与物理内存映射他们使用页概念(固定大小,默认4kb),通过维护页表实现访问(每个进程各种维护一个页表)
-
分段:基于段基地址+段内偏移的方式访问内存,目前64位系统已经架空使用,但是概念还存在使用(CPU的任务管理还在使用)
- 代码段、数据段、堆、共享库、栈
- 栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等
- 堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收
-
交换内存:计算机硬盘上的空间,当内存不够用,虚拟内存页映射到硬盘上,释放物理内存空间
-
地址空间:内存上下文。每个进程和内核都有对应的虚拟地址空间
-
OOM:内存溢出,内核检测到可用内存低,极端下会进行kill进程,确保系统正常运行
-
换页:换页是将页面换入和调出主存,当物理内存容量不够的时候,利用换页算法把物理上的页写到硬盘上,当缺页的时候再换入
-
缺页:虚拟内存已经分配映射的页,但是还不在物理内存上就发生缺页,再把硬盘上的数据写入内存
性能指标:
- 匿名换页:匿名换页牵涉进程的私有数据:进程堆和栈,换页会发生I/O阻塞,增大程序延迟(换出异步完成可能不太影响,换入会影响到)
- 常驻集合大小(RSS):已分配的主存页大小(真实内存使用大小)
- 虚拟内存大小:所有已分配的区域(已映射、未映射(没有使用)、已映射到物理交换空间)
- 缓存机制(系统能够用的内存需要加上缓存内存大小)
- buffers:缓存块设备的读写
- cached:缓存文件的读写(数据和元数据)
- 参考:https://zhuanlan.zhihu.com/p/101258495
性能工具使用
vmstat
系统内存健康程度总览(大颗粒度)
swpd:交换出的内存量
free:空闲的可用内存
buff:用于缓存块设备的读写
cache:用于缓存文件的读写
si:换入的内存(换页)
so:换出的内存(换页)
参数:-Sm 显示M单位
判断方向:
- 换页入出的内存使用情况(si,so为匿名换页)
si和so一直非0,需要关注内存的消耗情况
sar
现运行的历史统计数据
-B:换页统计信息
-H:大页面统计信息
-r:内存使用率
-R:内存统计信息
-S:交换空间统计信息
-W:交换统计信息
参考:https://www.jianshu.com/p/ea7ed85918ac
判断方向:
- 换页入出的内存使用情况(KB/s,表明内存不足)
- -B 换页是主存(内存)与块设备(硬盘)之间的page in/out,把块设备中的页读入内存或把内存中的页写入块设备(时常有,vmstat in的值=sar pgpgout)
- -W 换页从块设备swap区中读入/读出(如果为非0,需要关注)
- 缺页情况,majflt/s(真实缺页)情况比fault/s严重
- %vmeff衡量页回收效率,pgsteal/pgscan的值,值越小越糟糕
ps
查看进程的内存使用情况
%MEM:主存使用占总量百分比
VSZ:虚拟内存(KB)
RSS:常驻内存(KB)
判断方向:
- 进程占用内存情况
top
top可以看到进程内存和内存总体情况的汇总
参考书籍:性能之巅:洞悉系统、企业与云计算