Linux c/c++编程--(内存2)测试内存的释放
1,如下是测试程序,获取内存的动态变化过程。
#! /bin/sh
FILE='/usr/local/procrank.log'
MEMLOG='/usr/local/meminfo.log'
#./memtest &
: > $FILE
: > $MEMLOG
procrank | head -n 1 > $FILE
#for i in {1..50..1}
#for (( i=1; i<50; i++))
#for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 \
# 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
i=1
while true
do
# procrank | grep maintest >> $FILE
cat /proc/meminfo >> $MEMLOG
echo $i" is running"
j=$(( i++))
sleep 0.5
done
2,场景一:执行了一个消耗内存程序,不断的去申请内存。我们看一下系统内存,和关心的主业务程序main占用内存情况。
下图是使用Origin画图软件,给出的一个变化曲线图。
- 可用内存是包含 memfree + cached + buffer。虽然这里没写buffer部分的值。
- 进程的运行内存是可以压缩的,特别是代码段。
- 16s 时,是吃内存的memtest 进程被OOM给杀死了,可以看到available,cached,free 内存都恢复了。