Hello,
I am currently performing some load tests on Wildfire servers using several connection managers connected to it. We simulate clients with tsung using a cluster of 3 machines.
The ConnectionManagers are 4 DualCore with 2Gb and the Wildfire Server is a “dual” DualCore with 4Gb.
-
I was able to reach with a single CM connected to the Wildfire server 15000 connected users with no real problem. I only had to adjust the Java Memory and mainly adjust the Thread Stack Size to be able to start more native threads.
-
With 4 CM I cannot get more than 22000 users. In fact I was able to get higher (more than 30000) but while tsung is playing, the load of the server becomes really high and generally the system dies or the connections are closed.
On server side, the message Connection reset is logged in debug but no error nor warning.
java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.jivesoftware.wildfire.net.ServerTrafficCounter$OutputStreamWrapper.write(Se rverTrafficCounter.java:244)
at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
at java.io.BufferedWriter.flush(BufferedWriter.java:236)
at org.jivesoftware.util.XMLWriter.flush(XMLWriter.java:190)
at org.jivesoftware.wildfire.net.XMLSocketWriter.flush(XMLSocketWriter.java:31)
at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:56 8)
at org.jivesoftware.wildfire.multiplex.ConnectionMultiplexerSession.deliver(Connec tionMultiplexerSession.java:324)
at org.jivesoftware.wildfire.multiplex.ClientSessionConnection.deliver(ClientSessi onConnection.java:65)
at org.jivesoftware.wildfire.ClientSession.deliver(ClientSession.java:772)
at org.jivesoftware.wildfire.ClientSession.process(ClientSession.java:766)
at org.jivesoftware.wildfire.roster.Roster.broadcastPresence(Roster.java:586)
at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.broadcastUpdate(Presenc eUpdateHandler.java:258)
at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:109)
at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:153)
at org.jivesoftware.wildfire.SessionManager$ClientSessionListener.onConnectionClos e(SessionManager.java:1458)
at org.jivesoftware.wildfire.net.VirtualConnection.notifyCloseListeners(VirtualCon nection.java:147)
at org.jivesoftware.wildfire.net.VirtualConnection.close(VirtualConnection.java:12 1)
at org.jivesoftware.wildfire.multiplex.ConnectionMultiplexerManager.closeClientSes sion(ConnectionMultiplexerManager.java:169)
at org.jivesoftware.wildfire.multiplex.MultiplexerPacketHandler.handle(Multiplexer PacketHandler.java:92)
at org.jivesoftware.wildfire.net.ConnectionMultiplexerSocketReader$1.run(Connectio nMultiplexerSocketReader.java:121)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
On client side I get several warnings saying:
IQ stanza with invalid type was discarded:
I tried to change the parameters like number of connections or threads for the connection managers but did not successfull results. I also tried the IBM JVM but it gave no significant result.
From all I got I think the server is overloaded by the traffic and I think that it is caused by a high number of simultaneous transactions.
Have anybody an idea or some tips I could use to find more precisely the bottleneck ?
Thanks in advance for your help
Best Regards
Pascal