Linux、MySQL和Redis内存管理评估
2023-07-05 09:31:54 0 举报
AI智能生成
linux mysql redis内存管理横评(详解在注释里面,图片加载需要时间)
作者其他创作
大纲/内容
分段机制会把程序的虚拟地址分成 4 个段
能产生连续的内存空间
好处
内存碎片
内存交换的效率低
不足之处
回收方式:内存交换
分段
怎么解决分段的内存碎片、内存交换效率低的问题?
如果内存空间不够:LRU
举例
虚拟地址和物理地址是如何映射的?
局部性原理
二级页表空间分析
不分级为何无法节省内存
页表缓存TLB(Translation Lookaside Buffer)
多级页表
分页
内存分配方式
1、回收内核中的缓存
2、swap 机制
3、触发 OOM(Out Of Memory) 机制
三种回收方式
匿名内存页(数据段、堆段 和 栈段)
哪些进程的内存交换到硬盘中?
active_list
inactive_list
PG_referenced标志位
主要构成
申请一个匿名内存页
匿名内存页被进程访问
内存淘汰过程
活跃链表 的内存页也有衰退的过程
流程
LRU 内存淘汰算法
swap机制原理
Linux
申请空间
划分空间
Buffer Pool的初始化
1、free page
2、clean page
3、dirty page
意义
误区说明
free list
flush list
lru list
针对这3种页,InnoDB使用3种链表维护
3种页
链表中的节点不是缓存页本身,而是页对应的控制块
Buffer Pool的管理
预读
大量数据涌入
使用LRU会遇到的问题
优化点1:midpoint
优化点2:old_blocks_time
优化点3:减少热页在链表移动
冷热分离LRU
解决方法
Buffer Pool缓存淘汰
1、从LRU 链表的冷数据区刷新部分页面到磁盘
2、从 flush 链表中刷新一部分页面到磁盘
3、主动刷盘内存池中被淘汰的脏页
脏页刷盘
mysql
info memory
内存统计
对象内存
进程本身运行内存
缓冲内存
Redis内存划分
定时删除
惰性删除
定期删除+惰性删除
noeviction(默认)
allkeys-random
allkeys-lru
allkeys-lfu
volatile-random
volatile-lru
volatile-lfu
volatile-ttl
内存淘汰机制
维护前后指针及哈希表,空间消耗大
问题
传统lru
增加24bit长度时间属性
随机取5个,淘汰最晚时间的那个
redis lur - 近似lru
lru存在问题
lru - 最近最少使用
目的:淘汰内存中不经常使用的数据
time
增长
衰减
counter
字段
工作过程
lfu - 最近最不经常使用
内存回收
内存模型
redis
内存回收横评
0 条评论
回复 删除
下一页