• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

unix 与 windows 有关socket 资源 释放的区别???

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 19次 | 进入软件测试论坛讨论

领测软件测试网
本人在编成中客户端采用短连接的方式与Server进行socket 连接,当server与client 均在windows xp下运行时每秒5个并发测试不成问题,但当把客户端放在hpux 下运行时却只能有每秒1个的处理能力,当加大压力时(每秒4个)这时客户端在connect 时返回错误代码 9 表示 is not a valid file descriptor.对于这种情况,本人以为是windows与unix下socket 资源释放时间有关系。但具体如何解决却一筹莫展(不想改成长连接的方式)。

 albert 回复于:2002-07-19 14:55:14
你能把UNIX系统的具体返回的错误信息贴出来吗?

 jazy 回复于:2002-07-19 15:54:09
albert 你好,谢谢你看到这个帖子,其实具体的系统资源的错误信息我还不知道如何去查看,只是在客户端程序中对connect执行的错误码进行了判断:
 int rc;
 rc = pClient->Connect(m_BillAddr,m_BillPort);

发现在每秒之行5个socket 请求时大概执行了几百个请求后开始出现rc值为9的情况。

不知道这种情况该如何定位问题所在?

望不吝赐教!!谢谢!!


 albert 回复于:2002-07-19 16:18:44
你的程序是C写的? 我编程不在行。我可能只能从操作系统级帮你分析一下,你在运行到几百个请求时在HPUX下执行 netstat -a 观察一下是否你需要建立的连接有多少,注意一下它们的状态是什么。

 jazy 回复于:2002-07-22 18:04:28
用netstat -a 发现大概有50个连接(在服务端的监听端口上),这种情况在后来测试发现具体的问题如下:

    当客户端不断与服务端建立连接后又断开时,过一段时间后会出现客户端无法对服务端的应答作反应,即不会再触发receive。

 albert 回复于:2002-07-22 19:21:31
不好意思,我现在正在干一些我很不愿意干但又没法不干的工作,停不下来,我明天再帮你看吧。

 fdlj53u 回复于:2002-07-23 09:59:13
我觉得是unix 下的文件描述字消耗完了。看看有没有关闭文件描述符。

 jazy 回复于:2002-07-23 12:56:41
关闭操作肯定是做了,但是是否及时关闭就不知道了,因为在我的操作里需要频繁的进行连接、关闭操作。unix 的file descriptor 定义的是多少,能否设大些,又该如何配呢?

 albert 回复于:2002-07-23 16:09:57
jazy, Have you use any system function in the customized function :      pClient->Connect(m_BillAddr,m_BillPort); I think you should check the
meaning of the return error code of the system call.(rc=9)
Sorry, I am afraid I can not help you more about this question owing to 
my limited knowledge. 


 jazy 回复于:2002-07-23 19:28:18
这方面的资料也查找过了,但目前此问题还是没有解决,而且问题的出现情况还可以进一步具体到当连续进行了53次短连接(连接后发包完毕,立刻关闭连接)后,从第54次开始就无法收到应答包了。真真觉得很奇怪!!!!

albert ,非常感谢你的帮助!!!



 jazy 回复于:2002-07-23 21:28:20
问题似乎解决了。原因是HPUX系统在创建线程是采用POSIX标准,在执行
rc=pthread_create(&m_ThreadId,&attr,start_address,arglist);
时,要注意设定&attr属性,该参数默认为NULL,为join方式,而在后面并为进行pthread_join操作进行线程合并以释放资源,从而造成大量的leap,后来的处理是采用
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);采用detach的方式创建线程,这样,在线程结束时,系统将自动释放资源。

出现这种问题就涉及到不同操作系统的标准不同,这种情况在solaries系统好像不会发生。



 albert 回复于:2002-07-23 23:52:42
Congratulations! Jazy,that's great. 
This question is really difficult and teach me more.
Thanks. 
Let us make our forum more populated together!

 bluespace 回复于:2002-07-25 19:21:04
greate!you can use 'glance' to check resource usage.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网