免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: windwhistle
打印 上一主题 下一主题

[内存管理] 特别奇怪的内存泄露问题求助 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2014-03-10 18:00 |只看该作者
本帖最后由 windwhistle 于 2014-03-10 18:00 编辑

cat /proc/net/sockstat
sockets: used 223130
TCP: inuse 7875 orphan 23 tw 1473 alloc 208256 mem 895006
UDP: inuse 14255 mem 9762
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
22 [报告]
发表于 2014-03-11 08:37 |只看该作者
没看明白~~

论坛徽章:
0
23 [报告]
发表于 2014-03-11 14:19 |只看该作者
TCP: inuse 7875 orphan 23 tw 1473 alloc 208256 mem 895006
这里的mem 应该是以4K为单位的,大约有快4个G了

论坛徽章:
0
24 [报告]
发表于 2014-03-11 14:22 |只看该作者
所以我个人觉得是你套接字缓冲区中挤压的数据太多了

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
25 [报告]
发表于 2014-03-11 15:05 |只看该作者
大概看了下代码,这个应该就是tcp skb占用的总的内存,可能是你的rmem和wmem设置得有点大,缓冲区占用比较多。

论坛徽章:
0
26 [报告]
发表于 2014-03-11 16:34 |只看该作者
netstat看到recv-q的数据是比较多,之前忽略了这个问题,
程序采用ET模式,recv时也小心处理了数据没从buffer读完的情况,
但不知道怎么recv-q里还那么多数据,我再检查下

论坛徽章:
0
27 [报告]
发表于 2014-03-11 16:36 |只看该作者
懒省事的话 不要用netstat监视socket的内存使用了, 链接多的时候比较慢
用 cat /proc/net/sockstat  吧,
我看了下内核代码,感觉还是比较靠谱的

论坛徽章:
0
28 [报告]
发表于 2014-03-11 16:43 |只看该作者
回复 25# humjb_1983


    我倒是发现了更奇怪的现象,我在自己的机器上模拟楼主的这种行为:
=================================================
1    本机服务端listen1万个socket, 客户端connet 这1万个socket,这样一共2万个socket
2    客户端每个connect上去的socket 发送128K数据,但是 服务端从来不调用read
3    此时观察 meminfo , slabinfo,  sockstats ,  free -m 等
=================================================

发现  这 128K * 10000 = 1.3G 左右的内存 确实在 meminfo , free -m, sockstats 中有体现,但是slabinfo却没有

也就是说 这1.3个G 确实耗掉了(应该大部分都是skb),但是却不是在slabinfo中耗掉的,
看 meminfo 只看到 memfree 减少了1个多G ,  
buffer, cached, mmaped, 匿名页,甚至连active 和 inactive都没变化
这 内存谁用掉了???

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
29 [报告]
发表于 2014-03-12 08:42 |只看该作者
lovegq 发表于 2014-03-11 16:43
回复 25# humjb_1983

个人理解,skb中的数据page肯定是伙伴系统分配的,skb数据结构应该是slab中分配的,skb数据结构自身占的空间应该很小的,你的slabinfo中没有skb?

论坛徽章:
0
30 [报告]
发表于 2014-03-12 09:29 |只看该作者
回复 29# humjb_1983


    你的理解差不多,看了下代码, 我的网卡驱动是e1000e,  skb本身是从slab分配的,slabinfo有显示,但是不多
skb中的数据,是网卡驱动用alloc_pages直接从buddy中分配的,难怪 meminfo中 只看到 memfree 往下掉,并不见其他网上涨
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP