我们的服务在 Linux 申请的内存不会立刻从物理内存划分出来。系统数据修改时,才会发现物理内存没有分配,此时 CPU 会产生缺页中断,操作系统才会以 page 为单位把物理内存分配给程序。系统这么设计,主要是为了降低系统的内存碎片,并且减少内存的浪费。 不过系统分配的页很小,一般是 4KB,如果我们一次需要把 1G 的数据插入到内存中,写入数据到这块内存时就会频繁触发缺页中断,导致程序响应缓慢、服务状态不稳定的问题。 所以,当我们确认需要高并发读写内存时,都会先申请一大块内存并填 0,然后再使用,这样可以减少数据插入时产生的大量缺页中断。我额外补充一个注意事项,这种申请大内存并填 0 的操作很慢,尽量在服务启动时去做。
相关推荐
计算机学姐11 小时前
基于SpringBoot的高校爱心慈善管理系统vx+_bysj686911 小时前
springboot 旅行小程序97353山岚的运维笔记11 小时前
mysql 专业笔记 -- 第 14 章:GROUP BY凤城老人12 小时前
基于 Flask 的企业级 CMS 架构设计与实现步行cgn21 小时前
YAML 的语法规则骇客野人1 天前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案IT_陈寒1 天前
React的状态更新坑得我差点加班到天亮码事漫谈1 天前
一天搭出 80% 的 Agent,然后卡在 95% 到死leonkay1 天前
C# 锁机制——【2】深入原理江湖十年1 天前
在 Go 中使用 dyno 包处理动态对象