Toon posts:

[Java] NIO serversocketchannel deadlock

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vreemd probleem. Ik heb een simpele server gemaakt in java die gebruik maakt van non-blocking sockets (NIO package). Toch blijft de server af en toe hangen op de serversocket.accept(); methode.

Ik denk tenminste dat hij hier blijft hangen omdat JDB de regel ervoor aangeeft op de stacktrace.

Heeft iemand dit al eerder meegemaakt? Of weet iemand een oplossing?
Het gebeurt sporadisch, maar zeker 1 keer in de week.

Verwijderd

Kan je een stukje code posten en de stacktrace want ik kan natuurlijk niet ruiken hoe je code eruit ziet ;)

Verwijderd

Topicstarter
Dat is dus het gekke, de stacktrace bevat alleen de run methode van de thread waarin hij is en wijt naar regelnummer zoveel waar de accept() methode van de serversocketchannel staat.

Verwijderd

Topicstarter
Een stukje code:

while(keeprunning) {
try {
long start = System.currentTimeMillis();

SocketChannel clientChannel = serverChannel.accept();
// If serverSocketChannel is non-blocking, sChannel may be null
if ( clientChannel == null )
{
//Non-blocking returns much null channels
} else {
//Accept connection and add to server
clientChannel.configureBlocking( false );
Connection c = new Connection( clientChannel );
addConnection(c);
}

//Handle all connections and their traffic
ch.run();

long end = System.currentTimeMillis();
if(start - gctimer > 240000){
System.gc();
gctimer = System.currentTimeMillis();
}
if((end-start<200) || (users.size()==0)){
try{
sleep(500);
}catch(Exception e){
log("CONNECTIONHANDLER","Error while decreasing processor usage",false);
}
}
}catch(Exception e){
//do nothing at all.
}
}