我有个往服务器写数据的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是做什么用的?体现什么现象?

解决方案 »

  1.   

    Recv-Q,和Send-Q是socket等待处理的队列.应该是你对连接的处理有问题.
      

  2.   

    Recv-Q和Send-Q 是tcp 协议中的序号,用来表示/实现滑动窗口的你检查一下是不是因为你的,客户端/服务端 的程序问题。比如数组越界。socket也逐渐变慢-------- 有没有停止?照理说 Recv-Q/Send-Q 不变的话,表示没有数据在传输了
      

  3.   

    Socket停止了,但是连接没有断开,因为我的发送方是一个队列,单线程向Server写数据,到最后就停了,但是连接不断,这个确实头疼好长时间了,
      

  4.   

    建立一个监视线程随时报告socket线程池的资源,
    你是用channel做的吗?最好可以使用socketchannel,抗压性要比同步的socket好
    在java.nio的包包里
    长时间不用的socket应该摒弃,如果这个socket再次启用的话,客户端自然会联系上
      

  5.   

    TinyJimmy说的对,谢谢各位了,散分了