配置下發時內存變化曲線

工業生產環境,有時對內存的使用是極爲苛刻的。

在項目預言時,要提前識別可能潛在的風險,將這些風險點一一列出來。除了要保證程序的正確性外,最需要關注的是內存佔用以及性能。而在內存方面,既要理論計算(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滿足的話,那麼繼續分析程序的性能吧。

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