[ https://issues.apache.org/jira/browse/DRILL-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16384310#comment-16384310 ]
ASF GitHub Bot commented on DRILL-5994: --------------------------------------- Github user ilooner commented on a diff in the pull request: https://github.com/apache/drill/pull/1148#discussion_r171988996 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java --- @@ -154,35 +152,31 @@ public void start() throws Exception { final boolean authEnabled = config.getBoolean(ExecConstants.USER_AUTHENTICATION_ENABLED); - port = config.getInt(ExecConstants.HTTP_PORT); - boolean portHunt = config.getBoolean(ExecConstants.HTTP_PORT_HUNT); - int retry = 0; - - for (; retry < PORT_HUNT_TRIES; retry++) { - embeddedJetty = new Server(new QueuedThreadPool(config.getInt(ExecConstants.WEB_SERVER_THREAD_POOL_MAX))); - embeddedJetty.setHandler(createServletContextHandler(authEnabled)); - embeddedJetty.addConnector(createConnector(port)); - + int port = config.getInt(ExecConstants.HTTP_PORT); + final boolean portHunt = config.getBoolean(ExecConstants.HTTP_PORT_HUNT); + final int acceptors = config.getInt(ExecConstants.HTTP_JETTY_SERVER_ACCEPTORS); + final int selectors = config.getInt(ExecConstants.HTTP_JETTY_SERVER_SELECTORS); + final QueuedThreadPool threadPool = new QueuedThreadPool(2, 2, 60000); + embeddedJetty = new Server(threadPool); + embeddedJetty.setHandler(createServletContextHandler(authEnabled)); + ServerConnector connector = createConnector(port, acceptors, selectors); + threadPool.setMaxThreads(1 + connector.getAcceptors() + connector.getSelectorManager().getSelectorCount()); + embeddedJetty.addConnector(connector); + for (int retry = 0; retry < PORT_HUNT_TRIES; retry++) { + connector.setPort(port); try { embeddedJetty.start(); + return; } catch (BindException e) { if (portHunt) { - int nextPort = port + 1; - logger.info("Failed to start on port {}, trying port {}", port, nextPort); - port = nextPort; - embeddedJetty.stop(); + logger.info("Failed to start on port {}, trying port {}", port, ++port, e); --- End diff -- I see thx > Cannot start web server on a machine with more than 200 cores > ------------------------------------------------------------- > > Key: DRILL-5994 > URL: https://issues.apache.org/jira/browse/DRILL-5994 > Project: Apache Drill > Issue Type: Improvement > Affects Versions: 1.11.0 > Reporter: Mitchel Labonte > Assignee: Mitchel Labonte > Priority: Minor > Labels: doc-impacting, ready-to-commit > Fix For: 1.13.0 > > > If the WebServer is launched on a machine that has more than 200 cores, you > get the following stack trace: > {noformat} > Exception in thread "main" > org.apache.drill.exec.exception.DrillStartupException: Failure during initial > startup of Drillbit: > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:313) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:289) > at org.apache.drill.exec.server.Drillbit.start(Drillbit.java:285) > Caused by: java.lang.IllegalStateException: Insufficient max threads in > ThreadPool: max=200 < needed=206 > at org.eclipse.jetty.server.Server.doStart(Server.java:321) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > at org.eclipse.drill.exec.server.rest.WebServer.start(WebServer.java:197) > at org.eclipse.drill.exec.server.Drillbit.run(Drillbit.java:140) > at org.eclipse.drill.exec.server.Drillbit.start(Drillbit.java:309) > ... 2 more > {noformat} > The cause of this is that in the WebServer start method, a Server instance is > created with the default constructor, which initializes a QueuedThreadPool > with a default maxThreads value of 200, and there is no way to configure this > value. > *For documentation* > New config option - drill.exec.web_server.thread_pool_max. -- This message was sent by Atlassian JIRA (v7.6.3#76005)