免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7603 | 回复: 7
打印 上一主题 下一主题

[系统管理] top显示的mem项中的used 是怎么计算出来的? [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-14 19:51 |只看该作者 |倒序浏览
本帖最后由 registcn 于 2015-09-16 18:34 编辑

最近一个c程序从5.4迁移到6.5系统,发现内存使用快,且释放慢(周末两天不开其他程序都不能释放——我甚至怀疑是硬件问题,但想最后考虑这个问题)。

因此想到,两种方法追查问题:

1) 查看并计算每个进程占用的内存值,和c程序启动前项目的对比,以求发现哪些不同,从而知道谁在耗内存。
top -mcbn1(可以列出所有进程的top项)看到

  1. ...
  2. Mem:  12186268k total,  8768488k used,  3417780k free,  1141880k buffers
  3. Swap:  8388600k total,    77300k used,  8311300k free,   121144k cached

  4.   PID USER      PR  NI  USED  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                  
  5. 2981 yilong    20   0  1268 1268  844 R  2.0  0.0   0:00.01 top
  6. ....
复制代码
自己手工把所有进程的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

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2015-09-14 21:13 |只看该作者
本帖最后由 MMMIX 于 2015-09-14 21:14 编辑

回复 1# registcn


    最有可能是你程序用的某些库变了。

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
3 [报告]
发表于 2015-09-15 10:17 |只看该作者
问题是子进程服务完毕就会退出,子进程数稳定,父进程内存也不增长。如果是库的问题,只能怀疑环境变了,导致程序间接的造成了其他多余内存消耗?

回复 2# MMMIX


   

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
4 [报告]
发表于 2015-09-15 10:18 |只看该作者
6.5上ldd看到的库确实有不同,直接依赖的库的依赖库(间接依赖)差很多,但是进程退出了,操作系统不能不释放吧回复 3# registcn


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2015-09-15 10:44 |只看该作者
回复 3# registcn


    先多贴点数据上来吧,包括你的程序各个进程的资源消耗情况、系统总体的资源情况,等等!

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
6 [报告]
发表于 2015-09-15 10:58 |只看该作者
本帖最后由 registcn 于 2015-09-16 12:18 编辑

这是执行 top -cbn1的结果,VIRT加起来4g多点,所以问题是 12025564k used怎么得来的?
####为了显示方便,此楼数据已删除####
   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2015-09-15 11:33 |只看该作者
回复 6# registcn


    进程列表不完整: 328 sleeping

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
8 [报告]
发表于 2015-09-16 12:00 |只看该作者
本帖最后由 registcn 于 2015-09-16 14:22 编辑

top300多个列表没办法贴,系统提示代码粘贴过多。。。只能能压缩了

现在重新得到两个列表,分别好内存2g和8g,8g是因为并发启动了一些server(稳定在数目256个,会操作curl下载和连接mysql),对比看top列表,进程数和各进程占内存
是差不多的(而且VIRT+buffer+cache严重小于8g的used内存,used怎么统计的呢?),可是used却达到8g,机器内存12g,之前问题发现时候是达到了12g后,swap过多,cpu打满,导致卡死。

有什么办法看看到底这8g被谁占用了吗?

2g的top结果 2g.zip (4.07 KB, 下载次数: 18)

8g的top结果 8g.zip (4.09 KB, 下载次数: 9)

回复 7# MMMIX


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP