配置下发时内存变化曲线

工业生产环境,有时对内存的使用是极为苛刻的。

在项目预言时,要提前识别可能潜在的风险,将这些风险点一一列出来。除了要保证程序的正确性外,最需要关注的是内存占用以及性能。而在内存方面,既要理论计算(malloc分配之类)新程序会占用多少内存,还要将理论计算得出的数据和实际运行时内存占用的数据相比较,看是否相吻合。

对于一个有1万多条规则的配置文件,经过应用程序下发至内核过程中,内存使用的情况是怎样的呢? 

分三步骤,获取数据,处理数据,分析数据;这里总结下测试方法:
1,获取数据,在 /etc/rc2.d/ZZ 脚本添加执行测试脚本test.sh :
2,在开机启动25分钟后(此时各项服务基本启动完毕,错开cron.hour等定时服务,内存使用基本稳定下来),获取下发规则前后的内存使用数据,test.sh脚本内容如下:

#!/bin/bash
testCnt=6
dataDir="/home/cfgMem"
exeDownCfg="/usr/sbin/ruleconfig"
tm=`date +"%Y-%m-%d:%H:%M:%S"`
mkdir -p $dataDir
cnt=`ls $dataDir | wc -l`
[ cnt -ge $testCnt ] && exit 0
file="$dataDir/${tm}"

sleep 1500

while true;do free;done | grep Mem | awk '{print $4}'  >> ${file} &
sleep 1
$exeDownCfg
sleep 5
reboot

3,让设备自动收集数据,约3小时后,ls /home/cfgMem 目录会有 6 个类似 2019-04-07:09:41:25 格式的数据文件

4,处理数据,cd /home/cfgMem 目录,下发时内存使用峰值统计:

去除数据文件末尾因重启写入不全的数据: ls | while read f;do echo $f; sed -i '$d' $f;done

统计下发过程中最大最小数据:ls | while read f;do echo $f;cat $f | awk 'BEGIN{H=0;L=1000000000} {a=$1;if(a>H)H=a;if(a<L)L=a} END{print H":"L; R=H-L;print "result:"R }';done > ../ha

求下发的最大内存使用峰值的平均值:cat ../ha | grep result | awk -F: '{print$2}' | awk 'BEGIN{cnt=0} {a+=$1;cnt+=1} END{b=a/cnt;print "cnt:"cnt; print " avrg:"b}'

5,使用工具对数据绘图:

6,数据分析,从上图可以直观的看出,配置下发后,常驻内存增加了约100MB。下发过程中,内存的使用峰值约是320MB。这样看仅有300MB剩余空间,很可能会因为内存耗尽而导致下发失败。所以在下发过程中,系统至少要有400MB的剩余空间,而要求公司增加内存是不可能的,不满足内存条件只有返工。lucky满足的话,那么继续分析程序的性能吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章