之前关于Linux的内存做过几次实验,得出的结论是
pannic_on_oom如果打开的话,当内存不够用的时候,系统会重启,否则,程序会被干掉以释放掉内存。
由于Linux在使用Swap的时候会降低APP的性能等,那么,到底啥时候会使用内存呢?
之前以为是swapniess造成的,但是这个只是个概率值,即使它的取值空间在0~100。经过今天的一点点测试发现,目前能影响swap时间早晚的是 /proc/sys/vm/min_free_kbytes这个参数,这个保留一部分内存,有默认值,当然也可以使用设置。 如果这个设置的越高,那么swap使用的时候会越早,反之亦然。
好吧,先到这儿,还是需要继续学习。
- 留段代码,下面的代码是今天测试的时候使用,当swap!=0的时候会退出程序。
#!/usr/bin/env python
#coding: utf8
import os
import sys
import time
r1 = {}
j = 1
def getMem():
with open('/proc/meminfo') as f:
total = int(f.readline().split()[1])
free = int(f.readline().split()[1])
buffers = int(f.readline().split()[1])
cache = int(f.readline().split()[1])
for i in range(0,9):
f.readline()
swaptotal = int(f.readline().split()[1])
swapfree = int(f.readline().split()[1])
swapused = swaptotal - swapfree
mem_use = total-free-buffers-cache
#print swaptotal
#print swapfree
#print swapused
if ( swapused > 0):
print "%s %s"%(mem_use,swapused)
print "马上退出"
sys.exit(0)
#mem_use = total-free-buffers-cache
#print mem_use/1024
#getMem()
#sys.exit()
j =0
for x1 in range (0,10000000):
print "enter 1 for"
r1[x1] = {}
for x2 in range(0,10240000):
r1[x1][x2] = ' ' * ( 1 * 1024 * 100)
#print "request for 1MB"
j = j + 1
print "request %s "%(j)
getMem()
#time.sleep(1)
- 另外,如果swap已经使用了,即使程序退出了,但是swap的释放还是需要些时间,如何加快呢?
swapoff -a
swapon -a
附录:
内存测试手稿