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.