server: fixed that new users can't connect to long living server (if it works too long without restarts, #11285);

This commit is contained in:
Oleg Agafonov 2024-04-07 22:35:19 +04:00
parent 46523f2035
commit 7285f13da2

View file

@ -55,6 +55,16 @@ public final class Main {
private static final Logger logger = Logger.getLogger(Main.class); private static final Logger logger = Logger.getLogger(Main.class);
private static final MageVersion version = new MageVersion(Main.class); private static final MageVersion version = new MageVersion(Main.class);
// Server threads:
// - worker threads: creates for each connection, controls by maxPoolSize;
// - acceptor threads: processing requests to start a new connection, controls by numAcceptThreads;
// - backlog threads: processing waiting queue if maxPoolSize reached, controls by backlogSize;
// Usage hints:
// - if maxPoolSize reached then new clients will freeze in connection dialog until backlog queue overflow;
// - so for active server must increase maxPoolSize to big value like "max online * 10" or enable worker idle timeout
// - worker idle time will free unused worker thread, so new client can connect;
private static final int SERVER_WORKER_THREAD_IDLE_TIMEOUT_SECS = 5 * 60; // no needs to config, must be enabled for all
// arg settings can be setup by run script or IDE's program arguments like -xxx=yyy // arg settings can be setup by run script or IDE's program arguments like -xxx=yyy
// prop settings can be setup by -Dxxx=yyy in the launcher // prop settings can be setup by -Dxxx=yyy in the launcher
// priority: default setting -> prop setting -> arg setting // priority: default setting -> prop setting -> arg setting
@ -432,6 +442,7 @@ public final class Main {
((BisocketServerInvoker) invoker).setSecondaryBindPort(managerFactory.configSettings().getSecondaryBindPort()); ((BisocketServerInvoker) invoker).setSecondaryBindPort(managerFactory.configSettings().getSecondaryBindPort());
((BisocketServerInvoker) invoker).setBacklog(managerFactory.configSettings().getBacklogSize()); ((BisocketServerInvoker) invoker).setBacklog(managerFactory.configSettings().getBacklogSize());
((BisocketServerInvoker) invoker).setNumAcceptThreads(managerFactory.configSettings().getNumAcceptThreads()); ((BisocketServerInvoker) invoker).setNumAcceptThreads(managerFactory.configSettings().getNumAcceptThreads());
((BisocketServerInvoker) invoker).setIdleTimeout(SERVER_WORKER_THREAD_IDLE_TIMEOUT_SECS);
} }
@Override @Override