我们的服务在 Linux 申请的内存不会立刻从物理内存划分出来。系统数据修改时,才会发现物理内存没有分配,此时 CPU 会产生缺页中断,操作系统才会以 page 为单位把物理内存分配给程序。系统这么设计,主要是为了降低系统的内存碎片,并且减少内存的浪费。 不过系统分配的页很小,一般是 4KB,如果我们一次需要把 1G 的数据插入到内存中,写入数据到这块内存时就会频繁触发缺页中断,导致程序响应缓慢、服务状态不稳定的问题。 所以,当我们确认需要高并发读写内存时,都会先申请一大块内存并填 0,然后再使用,这样可以减少数据插入时产生的大量缺页中断。我额外补充一个注意事项,这种申请大内存并填 0 的操作很慢,尽量在服务启动时去做。
相关推荐
间彧18 分钟前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?间彧22 分钟前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?间彧28 分钟前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?间彧29 分钟前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?间彧30 分钟前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?间彧34 分钟前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?间彧40 分钟前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent草明2 小时前
Go 的 IO 多路复用蓝-萧2 小时前
Plugin ‘mysql_native_password‘ is not loaded`