最近在使用Redis的时候遇到了linux系统中的vm.overcommit_memory参数设置,对此不是很了解,于是研究了一下,有了本文。
=====================================
一个尝试,如何在内存中申请空间:
>>> 100000*400000*8/1024/1024/1024
298.0232238769531
实际代码:
import numpy as np
x=np.zeros((100000,400000))
运行情况:
运行上面的代码后执行top命令,发现该进程的内存空间并没有明显变大,可以说x变量申请的298G空间并没有被分配,那么如何使内存真正被分配呢,给出下面的代码:
import numpy as np
x=np.zeros((100000,400000))
x+=0.0001
运行情况:
该代码的执行可以通过top命令发现确实有298G的内存空间被分配。
从上面的这个操作可以知道,在linux系统中系统真正的分配内存并不是在你申请的时候,而是在你初始化的时候。比如你使用C语言中的malloc申请内存,但是此时你所获得的是操作系统分配给你的虚拟地址,而此时这部分内存并没有真正的分配给你,要理解这个操作就需要对操作系统的虚拟地址和真实地址有一定的了解。
关于overcommit_memory与linux内存分配参考:
https://blog.51cto.com/u_13875041/5877796
-----------------------------------------------------------------------
查询linux系统的overcommit设置:
cat /proc/sys/vm/overcommit_memory
===============================================
参考:
https://blog.csdn.net/weixin_42073629/article/details/117170686
- overcommit_memory overcommit 内存 memory Redisovercommit_memory overcommit内存memory overcommit_memory overcommit_memory overcommit memory 内存memory系统linux loading dataset memory redis temporarily unavailable内存memory memory_profiler profiler内存 工具 mtksettings菜单 内存memory 20230818 memories内存chapter hbuilderx内存uniapp memory