It is a matter of how fast the client can deal with the mass of messages sent back by the server
20 users in the same room firing 10msg/sec produce a total of 4000 messages per second.
If the client simulator runs on a single machine (hopefully not the same that runs SFS!) you must make sure that it is capable of dealing with all those messages coming back. That's quite a bit of processing to do there.
There are 4K messages to deserialize and execute on every second.
If the client application doesn't keep up, the server messages will remain in the "network pipe". This eventually forces the server to store those messages in the client queue until it reaches full capacity. After that it is forced to drop messages.
Since your configuration only allows 1 dropped message, it is pretty evident why your clients are disconnected.
Please do take into considerations these issues when running stress tests.
You blame the server of dropping messages but the problem is that server is simply responding as fast as it can, firing all those messages back the client. If the client doesn't keep up and "remove" all that data from the network pipe, the server will not be able to write more data, it will store it in queues and then drop messages just to avoid to explode
If this mechanism was not in place you would eventually see the Server JVM collapse due to an OutOfMemoryError.