Redis 内存不足时后台进程无法fork的问题

标签:
杂谈 |
分类: C/C |
修改/etc/sysctl.conf文件中,增加vm.overcommit_memory=1,执行sysctl vm.overcommit_memory=1使之马上生效。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
相关概念
·与创建、删除线性区相关的系统调用
·fork()
1,内存映射
问:什么是内存映射?memory mapping
答:是内核的一种抽象手段,它可以将任意来源的数据映射到进程的虚拟地址空间。cpu处理任务时可以像处理普通内存中的数据结构一样,处理完后内核会自动将结果保存回数据源。
2,虚拟内存
摘自《深入理解内核》
一种很有用的抽象,叫虚拟内存(virtual memory)。虚拟内存作为一种逻辑层,处于应用程序的内存请求与硬件内存管理单元(memory management unit,MMU)之间。虚拟内存有很多用途和优点:
·若干个进程可以并发低执行。
·应用程序所需内存大于可用物理内存时也可以运行。
·程序只有部分代码装入内存是进程可以执行它。
·允许每个进程访问可用物理内存的子集
·进程可以共享库函数或程序的一个单独内存映像
·程序是可重定位的,也就是说,可以把程序放在物理内存的任何地方。
·程序员可以编写与机器无关的代码,因为他们不必关心有关物理内存的组织结构。
虚拟内存子系统的主要成分是虚拟地址空间(virtual address space)的概念。进程所用的一组内存地址不同于物理内存地址。当进程使用一个虚拟地址时,内核和MMU协同定位其在内存中的实际物理位置。
3,随机访问存储器(ram)的使用
·满足内核对缓冲区、描述符及其他动态内核数据结构的请求。
·满足进程对一般内存区的请求及对文件内存映像的请求。
·借助于告诉缓存从磁盘及其他缓冲区设备获得较好的性能。