CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

关于多进程sokcet服务器的一个问题

楼主xiaoxiaoku()2006-03-04 11:17:06 在 Linux/Unix社区 / 程序开发区 提问

我前一阵子编写了一个服务器端程序,是socket程序,然后基本实现就是每个客户端连接上就fork一个子进程进行通讯处理。对方客户端程序是采用多线程的方式。  
  最近出现了一个问题就是,当客户端的线程数达到一定量并运行几天后,客户端发出的消息,我的服务器端就可能收不到,导致系统超时。  
  因为是双方做的接口系统,所以现在想确定问题的具体所在。对方客户端的开发人员说他们的消息发出去了,但是我在服务器端又看不到收到消息包的日志(如果收到消息,我会将起打印在日志中),我自己写了一个客户端测试程序进行发包,也是消息包发出去了,但是我的服务端却收不到。  
  暂时只能靠重启解决了,但是运行了几天就会出现这种问题,不知道有哪位碰到过类似情况么?或者哪位知道有什么工具可以监测系统socket通讯过程中的消息传递吗? 问题点数:50、回复次数:4Top

1 楼fierygnu(va_list)回复于 2006-03-04 11:35:51 得分 25

可能的原因:  
  1、进程数超限  
  2、描述符数目超限  
   
  ulimit   -a看看soft   limit是多少,然后检查进程出问题时的值。可以到/proc下去看描述符的个数。pstree可以看进程数。Top

2 楼darkstar21cn(≮天残≯无畏)(死亡进行时)回复于 2006-03-04 11:42:09 得分 25

日志文件问题,在大部分操作系统下它的大小是有限定的。  
  另外线程数量也是有限定的  
   
  不知道你客户端的运行环境是什么,在Linux下调用send函数后并不是马上就发送出网卡了,只是放到一个发送队列里面去了而已  
   
  哪位知道有什么工具可以监测系统socket通讯过程中的消息传递吗  
  tcpdump就可以做到,可以指定ip、端口,打印数据包内容等,这个最好在你的服务端运行。  
  Top

3 楼tonyMCM(南京~上海)回复于 2006-03-06 11:27:33 得分 0

你看看有没有僵尸进程,如果有,最好搞个子进程队列,自己杀子进程。Top

4 楼xiaoxiaoku()回复于 2006-03-08 22:51:41 得分 0

找到原因,是程序内部消息队列被阻塞住了。谢谢各位老大。Top

相关问题

  • unix下,多进程socket 服务器问题
  • 急急!!!为什么服务器进程咯dllhost.exe进程一直增加不减少,能到100多M?
  • 怎样实现多个进程在同一个端口监听,就像web服务器一样
  • 我写的单进程多客户服务器程序,但是有问题,还是只能处理一个client
  • 进程内服务器还是进程外服务器?我很迷惑,盼高手解惑
  • 关于进程内服务器的内存分配问题
  • 一个关于COM进程外服务器的问题
  • 高分求解进程外服务器的问题.
  • !!!Asp.net下服务器端杀死Excel进程的办法??
  • asp.net中如何取得服务器进程的ID

关键词

  • 服务器
  • 客户
  • 消息
  • 通讯
  • 系统
  • socket
  • 进程
  • 客户端
  • 队列
  • 日志

得分解答快速导航

  • 帖主:xiaoxiaoku
  • fierygnu
  • darkstar21cn

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo