您的位置:首页 > 运维架构 > Linux

Linux的内存到底有多少密码

2016-11-05 18:12 423 查看
之前关于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


附录:

内存测试手稿



参考:

http://huoding.com/2012/11/08/198
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  centos