关于多进程sokcet服务器的一个问题
我前一阵子编写了一个服务器端程序,是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




