检测应用的内存泄漏情况(shell)
写代码——调试——修BUG
改来改去可能还存在一些没发现的问题,在工程量大的时候更容易出现,例如内存泄漏这样的问题,严重影响着系统性能。
网上有些检测C程序是否存在内存泄漏的工具还不错的,例如valgrind。
为解决服务器中运行的应用是否存在内存泄漏问题,编写了脚本来进行检测。
思路如下:
01. 文件1:ProcessList,用来保存需要内存泄漏检测的应用程序名,通过文件2:TestManage来管理,通过./TestManage -a 应用名 来添加或者./TestManage -d 应用名 来去除。
02. 文件3:MemoryLeakTest, 主程序。 首先清空文件4:RSSList(用来保存进程的内存检测结果)和文件5: LeakMemory.log(用来保存存在内存泄漏的应用名)。
03. 开始循环1,循环6次,每次循环通过文件1中的全部应用程序名—进程号—status文件得到占用内存大小,保存与文件4中,每次循环间隔1800秒,因此总计2个半小时。
04. 第三步结束后根据文件4中保存的所有应用程序的6次内存大小,相邻两个比较,若后面的大于前面的10%,flag变量值+1,共比较5次,若flag大于等于4,则认定该应用存在内存泄漏。
shell笔记:
01. sed用法:
在匹配字符串下一行添加:sed -i /$str/a\ "$str_new" $filename
在匹配字符串上一行添加:sed -i "/$str/i\\$str_new" $filename $str_new前的一个\是为转义
两个变量用下划线连接:${str1}_${str2}
02.
grep -m m "$str1" |awk -F $str2 '{print $p}'| sed -n "np"
匹配前m行个str1,在包含str2后的第p列,取第n行。
种树最好的时间是十年前,其次是现在。