- 论坛徽章:
- 1
|
本帖最后由 registcn 于 2015-09-16 18:34 编辑
最近一个c程序从5.4迁移到6.5系统,发现内存使用快,且释放慢(周末两天不开其他程序都不能释放——我甚至怀疑是硬件问题,但想最后考虑这个问题)。
因此想到,两种方法追查问题:
1) 查看并计算每个进程占用的内存值,和c程序启动前项目的对比,以求发现哪些不同,从而知道谁在耗内存。
top -mcbn1(可以列出所有进程的top项)看到
- ...
- Mem: 12186268k total, 8768488k used, 3417780k free, 1141880k buffers
- Swap: 8388600k total, 77300k used, 8311300k free, 121144k cached
- PID USER PR NI USED RES SHR S %CPU %MEM TIME+ COMMAND
- 2981 yilong 20 0 1268 1268 844 R 2.0 0.0 0:00.01 top
- ....
复制代码 自己手工把所有进程的used的列加起来,私以为,这个值应该= used-buffers-cached=7505464k,时机计算的和却和mem行的used根本不是一个数量级,
请问,每个进程的used应该怎么算?这也是本帖的题目。
2)或者有什么内核参数可以加快回收吗——不管具体谁耗内存——另辟蹊径解决内存释放慢的问题。
#################补充##################
网上参考了一个脚本
#/bin/bash
for PROC in `ls /proc/|grep "^[0-9]"`
do
if [ -f /proc/$PROC/statm ]; then
TEP=`cat /proc/$PROC/statm | awk '{print ($2)}'`
RSS=`expr $RSS + $TEP`
fi
done
RSS=`expr $RSS \* 4`
PageTable=`grep PageTables /proc/meminfo | awk '{print $2}'`
SlabInfo=`cat /proc/slabinfo |awk 'BEGIN{sum=0;}{sum=sum+$3*$4;}END{print sum/1024/1024}'`
echo $RSS"KB", $PageTable"KB", $SlabInfo"MB"
printf "rss+pagetable+slabinfo=%sMB\n" `echo $RSS/1024 + $PageTable/1024 + $SlabInfo|bc`
free -m
测试了下,发现rss+pagetable+slabinfo=296.518MB和used 7026M差太多(理应基本一致),难道真是机器问题?
[root@webmail-2-149 yilong]# sh cm.sh
193520KB, 7968KB, 101.518MB
rss+pagetable+slabinfo=296.518MB
total used free shared buffers cached
Mem: 11900 7026 4873 0 5 44
-/+ buffers/cache: 6976 4923
Swap: 8191 1351 6840
|
|