Alkaline uses a queue to process requests. It's pretty big and is calculated dynamically depending on what kind of hardware it sees. When a request comes in, it is added to the queue. Then a thread from a pool (which has maximum X threads when you specify -mt=X) picks up the request and processes it.
If the amount of requests exceeds what Alkaline can process, the queue may become full. This can be caused by a denial of service (DoS) attack or by simply more requests than your server can handle. At this moment, the server will refuse to add a new request to the queue and show the Server Busy error.
Alkaline measures the time between the first, the second and the third time the queue became full. If that time is below a dynamically calculated limit (at most a couple of seconds), it will consider this as a flood and will unbind from the listening socket till all the remaining requests in the queue are processed. This means that nobody will be able to connect during that period of time. If that scenario repeats frequently, Alkaline will add a sleep interval between the moment it has finished processing requests and the moment it's back online.
If you experience problems, the first thing to do is to disable the background indexing (--noreindex on the command line). This completely changes the mode of execution and avoids a series of locks that are potentially damaging for search performance. On the other hand, if under stress your Alkaline's CPU and network usage is very low, increase the -mt= value. This will allow Alkaline to spawn more threads to process requests and will make the queue longer. Search is only CPU-intensive, disable background indexing and keep increasing -mt= till you find an acceptable load under stress.