免费注册 查看新帖 |

Chinaunix

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

[C] 急~~~~~~~~~lsof 显示socket资源未释放,但是我是正常关闭了的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-23 16:48 |只看该作者 |倒序浏览
20可用积分
本帖最后由 korpus 于 2013-08-27 11:08 编辑

现在有两台机器  在A机器编译运行程序完全正常,socket关闭后,lsof -c ufs查看到没有socket异常的情况

把程序考到B机器上去编译,测试后,用lsof -c ufs发现有下面的,这太多了就会占用文件句柄资源,导致最后无法打开文件。
ufs     16617 cdadmin    8u  sock       0,6      0t0 406587399 can't identify protocol

实在不明白这是怎么回事? 有人能帮忙一下吗?

A机器 Linux DEV1 2.6.32-131.0.15.el6.x86_64
B机器 Linux UAT1 2.6.32-131.0.15.el6.x86_64

ulimit 查看两个机器的配置都一样

论坛徽章:
0
2 [报告]
发表于 2013-08-23 17:09 |只看该作者
观察到A机器上偶尔也会有 can't identify protocol  但是一会儿就消失了

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
3 [报告]
发表于 2013-08-23 21:19 |只看该作者
回复 1# korpus


    通常出现这个错误都是由于程序的bug导致没有正常关闭socket引起的。比如说mongo db就有在connect失败时没有正常关闭socket的总是。

论坛徽章:
0
4 [报告]
发表于 2013-08-23 21:47 |只看该作者
可能两种情况:
1.BUG漏close()了
2.引用计数原因

有没有父子进程?
这个问题用valgrind工具测试一下就知道了,另外如果是被动关闭一方,会有个timed_wait状态,在未消失之前,会继续占用资源。

论坛徽章:
0
5 [报告]
发表于 2013-08-23 22:11 |只看该作者
回复 3# myworkstation


    谢谢您的关注哈。

我开始也是这么想的。同样的代码在两个机器上分别编译,运行。第一个机器上面有错误,第二个上面没有。在第二个机器上面我连续跑压力测试没问题。但是第一个机器上面就有。太奇怪了。

在第一个机器里面,socket我都检查了都关了。而且netstat 状态看了也没有异常状态,但是就是有 can't identify protocol ...

论坛徽章:
0
6 [报告]
发表于 2013-08-23 22:13 |只看该作者
回复 4# Aquester


    close都关了的,netstat -na |grep 端口号 ; lsof  -c 程序看   都没有了异常连接。。

但是我在另一个机器上都是正常的,偶尔出现 can't identify protocol  ,不过一会儿就没有了

论坛徽章:
0
7 [报告]
发表于 2013-08-23 22:43 |只看该作者
korpus 发表于 2013-08-23 22:13
回复 4# Aquester


会正常消失,也说明了close()没有漏调用,会不会是因为句柄数超过了进程允许最大的?ulimit -a看看。

论坛徽章:
0
8 [报告]
发表于 2013-08-24 00:03 |只看该作者
回复 7# Aquester


    看过 ulimit -a 都是1024,但是机器A上面的文件句柄是没有超过1024的,超过1024会报open too many files

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
9 [报告]
发表于 2013-08-24 02:23 |只看该作者
lsof没用过,但是lsof是通过扫描/proc/$pid/fd/来确定打开的文件描述符的,楼主的程序打开了多少个fd全在这个文件里面得到体现。
具体你进去ls -lp一下就一目了然了。

另外,两台机器的体系结构是否一样,干脆你就把另一台机器的binary直接考到第二台机器运行看看。

论坛徽章:
0
10 [报告]
发表于 2013-08-25 14:12 |只看该作者
回复 9# cxytz01


    硬件都是虚拟机安装的,一个操作系统版本,但是其他设置不知道是否一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP