https://bugs.openldap.org/show_bug.cgi?id=9628
--- Comment #1 from Nadezhda Ivanova nivanova@symas.com --- The c_n_ops_executing counter is used by the server to determine the number of operations pending execution for a connection, and therefore the number of active threads used by the connection, since in a synchronous back-end these are identical. However, when the back-and is asynchronous, this counter no longer matches the number of active threads - the thread has completed its function, but the counter remains incremented until a response is received for the operation. In case of async-meta this is handled when the response is received, by a different thread. So, when the target servers are slower to respond, we have a situation when the counter is incremented, showing a high thread usage, when in fact there are very few threads in use. The server then starts deferring and rejecting operations, even though it is not overloaded.
This is reproducible by using an asynchronous client, introducing a network delay on the interface to the target server, and comparing the sum of monitorConnectionOpsExecuting for all connections with the number of active threads (cn=Active,cn=Threads,cn=Monitor)