免费注册 查看新帖 |

Chinaunix

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

[函数] 调用getaddrinfo导致程序僵死 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-10 10:35 |只看该作者 |倒序浏览
#0  0x0000003668ce6b5d in recvmsg () from /lib64/libc.so.6
#1  0x0000003668d0c7b5 in make_request () from /lib64/libc.so.6
#2  0x0000003668d0cbea in __check_pf () from /lib64/libc.so.6
#3  0x0000003668cd0107 in getaddrinfo () from /lib64/libc.so.6
#4  0x000000000046d2db in http_client::connect_timeout (this=0x314a940, host=0x5472a5f8 "10.134.58.92", port=0x85df8918 "20002", timeout=0x7f0158799f10) at http_client.cpp:392
#5  0x000000000046c047 in http_client::post (this=0x314a940, path="/invalid", data=
    "key=m%001%006%007%008%004%000%004%003%003%001%004%002%000%006%006%003%008%008%008%008%00.%001%00%2C%00m%001%006%007%008%004%000%004%003%003%001%004%002%000%006%006%003%008%008%008%008%00.%002%00") at http_client.cpp:194


程序死在getaddrinfo 调用里,看网上有人说是make_request在调用recvmsg时有bug,有人遇到过这种问题吗?怎么处理的?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2014-07-11 16:47 |只看该作者
dns服务不稳定,超时了吧。

论坛徽章:
0
3 [报告]
发表于 2014-07-11 16:59 |只看该作者
有可能是dns超时引起的,但是也不应该是永远都不返回啊
另外我跟踪了下glibc的代码,发现好像是死在了获取netlink接口的地址信息时

论坛徽章:
0
4 [报告]
发表于 2014-07-11 18:18 |只看该作者
回复 3# jazy333


    请问下你是怎么跟踪glib代码的~?

论坛徽章:
0
5 [报告]
发表于 2014-07-14 12:14 |只看该作者
下载响应版本的glibc,然后根据堆栈查看各个函数

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
6 [报告]
发表于 2014-07-14 15:20 |只看该作者
回复 1# jazy333


    这个应该跟DNS关系不大,很可能是glibc的版本和内核版本 不匹配造成的

查了下glibc 2.18 的代码,make_request的时候glibc会发送一个netlink请求给内核, 然后等待内核返回netlink response,
看起来是内核没有回response, 所以glibc一直挂在recvmsg等待(默认是超时是无限大),

查了下内核linux 2.6.18的内核代码, 内核会检查netlink 请求的标志位,只有带NLM_F_DUMP标志的请求内核才会回response,
新的内核linux 3.15并不检查这个标志, 总是回response

所以我感觉你这个问题的根源可能是glibc的版本和内核版本 不匹配造成的。
glibc 2.18的netlink请求并不带NLM_F_DUMP, 所以如果是glibc-2.18 + linux 2.6.18, glibc也是一样会hang住的。

可以查一下你的linux kernel版本和glib的版本, 看是不是有这个问题。

论坛徽章:
0
7 [报告]
发表于 2014-08-05 11:12 |只看该作者
内核: 2.6.32-220.17.1.el6.x86_64 #1 SMP Thu Apr 26 13:37:13 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
glibc:glibc-2.12-1.47.el6_2.12.i686
[@sjs_129_87 ~]# rpm -qi glibc
Name        : glibc                        Relocations: (not relocatable)
Version     : 2.12                              Vendor: Red Hat, Inc.
Release     : 1.47.el6_2.12                 Build Date: Fri 20 Apr 2012 12:04:23 AM CST

多谢分析

论坛徽章:
0
8 [报告]
发表于 2015-09-07 16:00 |只看该作者
请问一下这个问题解决了吗?我最近也碰到这个问题了。回复 7# jazy333


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP