Socket高手帮忙看一下,来者有分
我有个往服务器写数据的socket的程序,起了3个进程,开始运行6-8个小时没有问题,后来觉的速度逐渐减慢,我用如下命令在服务器端发现Recv-Q,和Send-Q逐渐增多,到一定程度就不动了,往Server写数据的socket也逐渐变慢,但是连接也没有断,也没有超时,另外我起用了TcpNoDelay,也设置了超时.
$ netstat -n | grep 192.168.0.12
tcp 8310 13032 192.168.0.11:8001 192.168.0.12:41801 ESTABLISHED
tcp 78431 13032 192.168.0.11:8001 192.168.0.12:43972 ESTABLISHED
tcp 14022 13032 192.168.0.11:8001 192.168.0.12:41439 ESTABLISHED
在这里谢过各位了,希望高手帮忙把把脉,另外Recv-Q和Send-Q是做什么用的?体现什么现象?
问题点数:200、回复次数:11Top
1 楼forgetwang(王焱)回复于 2006-02-07 21:04:51 得分 10
Recv-Q,和Send-Q是socket等待处理的队列.应该是你对连接的处理有问题.Top
2 楼poiunet(1 1)回复于 2006-02-07 21:11:12 得分 5
ZTop
3 楼wangzhanlili(小木头)回复于 2006-02-07 21:13:21 得分 35
Recv-Q和Send-Q 是tcp 协议中的序号,用来表示/实现滑动窗口的
你检查一下是不是因为你的,客户端/服务端 的程序问题。比如数组越界。
socket也逐渐变慢-------- 有没有停止?
照理说 Recv-Q/Send-Q 不变的话,表示没有数据在传输了Top
4 楼homeland520(天山之王(哈哈两声说Beybey))回复于 2006-02-07 21:36:33 得分 0
Socket停止了,但是连接没有断开,因为我的发送方是一个队列,单线程向Server写数据,到最后就停了,但是连接不断,这个确实头疼好长时间了,Top
5 楼homeland520(天山之王(哈哈两声说Beybey))回复于 2006-02-07 21:41:15 得分 0
有什么这方面的书籍或者资料可以参考的吗?或者你们遇到可能出现这种现象的情况Top
6 楼forgetwang(王焱)回复于 2006-02-08 11:16:48 得分 5
看来你做的是个长连接,要做一个定时器判断:一定时间内没有数据传输就关闭连接.Top
7 楼liubeiqi(无爱无悔)回复于 2006-02-08 11:27:27 得分 5
STUDYTop
8 楼christion3(黑翼堕天使)回复于 2006-02-08 11:43:21 得分 5
学习```这个还米学到
帮顶Top
9 楼TinyJimmy(Jimmy)回复于 2006-02-08 12:24:49 得分 100
好像阻塞得数据没有处理, 客户端不断的发, 服务器也收到了, 在回应, 但客户端没有处理.Top
10 楼closetome(即鹿无虞,惟入于林中。君子几,不如舍。往吝。)回复于 2006-02-08 13:03:04 得分 35
建立一个监视线程随时报告socket线程池的资源,
你是用channel做的吗?最好可以使用socketchannel,抗压性要比同步的socket好
在java.nio的包包里
长时间不用的socket应该摒弃,如果这个socket再次启用的话,客户端自然会联系上Top
11 楼homeland520(天山之王(哈哈两声说Beybey))回复于 2006-02-08 21:32:43 得分 0
TinyJimmy说的对,谢谢各位了,散分了Top




