当前位置: 技术问答>linux和unix
关于多进程sokcet服务器的一个问题
来源: 互联网 发布时间:2015-11-13
本文导语: 我前一阵子编写了一个服务器端程序,是socket程序,然后基本实现就是每个客户端连接上就fork一个子进程进行通讯处理。对方客户端程序是采用多线程的方式。 最近出现了一个问题就是,当客户端的线程数达到一定...
我前一阵子编写了一个服务器端程序,是socket程序,然后基本实现就是每个客户端连接上就fork一个子进程进行通讯处理。对方客户端程序是采用多线程的方式。
最近出现了一个问题就是,当客户端的线程数达到一定量并运行几天后,客户端发出的消息,我的服务器端就可能收不到,导致系统超时。
因为是双方做的接口系统,所以现在想确定问题的具体所在。对方客户端的开发人员说他们的消息发出去了,但是我在服务器端又看不到收到消息包的日志(如果收到消息,我会将起打印在日志中),我自己写了一个客户端测试程序进行发包,也是消息包发出去了,但是我的服务端却收不到。
暂时只能靠重启解决了,但是运行了几天就会出现这种问题,不知道有哪位碰到过类似情况么?或者哪位知道有什么工具可以监测系统socket通讯过程中的消息传递吗?
最近出现了一个问题就是,当客户端的线程数达到一定量并运行几天后,客户端发出的消息,我的服务器端就可能收不到,导致系统超时。
因为是双方做的接口系统,所以现在想确定问题的具体所在。对方客户端的开发人员说他们的消息发出去了,但是我在服务器端又看不到收到消息包的日志(如果收到消息,我会将起打印在日志中),我自己写了一个客户端测试程序进行发包,也是消息包发出去了,但是我的服务端却收不到。
暂时只能靠重启解决了,但是运行了几天就会出现这种问题,不知道有哪位碰到过类似情况么?或者哪位知道有什么工具可以监测系统socket通讯过程中的消息传递吗?
|
可能的原因:
1、进程数超限
2、描述符数目超限
ulimit -a看看soft limit是多少,然后检查进程出问题时的值。可以到/proc下去看描述符的个数。pstree可以看进程数。
1、进程数超限
2、描述符数目超限
ulimit -a看看soft limit是多少,然后检查进程出问题时的值。可以到/proc下去看描述符的个数。pstree可以看进程数。
|
日志文件问题,在大部分操作系统下它的大小是有限定的。
另外线程数量也是有限定的
不知道你客户端的运行环境是什么,在Linux下调用send函数后并不是马上就发送出网卡了,只是放到一个发送队列里面去了而已
哪位知道有什么工具可以监测系统socket通讯过程中的消息传递吗
tcpdump就可以做到,可以指定ip、端口,打印数据包内容等,这个最好在你的服务端运行。
另外线程数量也是有限定的
不知道你客户端的运行环境是什么,在Linux下调用send函数后并不是马上就发送出网卡了,只是放到一个发送队列里面去了而已
哪位知道有什么工具可以监测系统socket通讯过程中的消息传递吗
tcpdump就可以做到,可以指定ip、端口,打印数据包内容等,这个最好在你的服务端运行。