Jrds is fine tunned to avoid overload either the monitored hosts or the collecting server.
To avoid overloading the monitored hosts, all collect are done within one thread for an single host, that thread will connect to different probes and get values. It also cache connection to probes. For each different connections defined in the host configuration, a binding is done and kept for all the collect duration and then released at the end. The thread will then be reused for another host.
The load on the collecting server is managed by using a fixed number of thread, so whatever the number of different declared hosts is, the CPU load on the server is bonded. The impact of this it's that the collect can be too long if too much hosts are declared, or many of the connections are hanged. To avoid this, the collect time is bonded to the step value. At the end of the collecting phase, every still waiting probes and hosts are dropped and will no be collected.
If a connection for a protocol can't be established, all probes using this protocol will not be collected. So if a host is down, this will be detected quickly and il will hang for too long, preventing other hosts to be collected.
The number of collecting threads, the step and timeout values and other poller parameters are defined using jrds' properties.