日期:2014-05-20  浏览次数:20579 次

JAVA程序运行一段时间之后,就变得很奇怪
JAVA写的一个接收SOCKET数据的程序,多线程,一方面负责接收,一方面负责给用户分发,现在遇到一个比较奇怪的现象:

运行1个小时左右,就接收不到数据,如果接收数据的线程重新new 一个接收对象,瞬间可以收到少量的数据,但是马上又接收不到数据了,知道再new出来一个对象(程序中有一个线程负责判断接收数据是否超时,如果超时,就会重新启动接收数据的线程);

这个时候,如果把这个进程KILL掉,再启动,马上就恢复正常,接收速度大大提高,但是过了一个小时之后,又会接收不到数据。

在接收不到数据的时候用pstack看了一下线程,20个左右。


请问这个应该是哪里的问题呢?




------解决方案--------------------
无代码无真相啊 可能的原因太多了 估计是程序逻辑问题
------解决方案--------------------
呵呵 还有可能就是存储空间问题。
------解决方案--------------------
就是你判断重新启动进程那块的代码
------解决方案--------------------
一种情况,你的socket连接数是有限制的,有可能是连接没有得到释放导致的,连接数超了,资源耗尽。
还有一种情况,在一台机器上多个socket的情况,两个socket用到同一个端口,IP的情况,这样也会出问题。没具体研究过,楼主有时间看看这个,看有不有用
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6213296
------解决方案--------------------
探讨
连接数超了不会抛出异常吗?

能否给一个判断连接数的方法?