Re: [jetty-user] Stopping programatically causes “ 1 threads could not be stopped”
Jesse McConnell <[email protected]>
| Newsgroups | gmane.comp.java.jetty.support |
|---|---|
| Message-ID | <[email protected]> |
http://docs.codehaus.org/display/JETTY/Securing+Jetty try using the approach described here? cheers, jesse -- jesse mcconnell [email protected] On Mon, Jan 10, 2011 at 13:47, Ondřej Žižka <[email protected]> wrote: > Hi, > > this is a copy of > http://stackoverflow.com/questions/4650713/jetty-stopping-programatically-causes-1-threads-could-not-be-stopped > . > I'm sending here to bring some attention to it. > > > I have a Jetty 6.1.26 instance. > I want to shut it down by HTTP GET sent to `/shutdown`. > So I created a `JettyShutdownServlet`: > > @Override > protected void doGet(HttpServletRequest req, HttpServletResponse resp) > throws ServletException, IOException { > > resp.setStatus(202, "Shutting down."); > resp.setContentType("text/plain"); > ServletOutputStream os = resp.getOutputStream(); > os.println("Shutting down."); > os.close(); > resp.flushBuffer(); > > // Stop the server. > try { > log.info("Shutting down the server..."); > server.stop(); > } catch (Exception ex) { > log.error("Error when stopping Jetty server: "+ex.getMessage(), ex); > } > > However, when I send the request, Jetty does not stop - a thread keeps > hanging in `QueuedThreadPool` on the line with `this.wait()`: > > // We are idle > // wait for a dispatched job > synchronized (this) > { > if (_job==null) > this.wait(getMaxIdleTimeMs()); > job=_job; > _job=null; > } > > ... > > 2011-01-10 20:14:20,375 INFO org.mortbay.log jetty-6.1.26 > 2011-01-10 20:14:34,756 INFO org.mortbay.log Started > [email protected]:17283 > 2011-01-10 20:25:40,006 INFO org.jboss.qa.mavenhoe.MavenHoeApp Shutting > down the server... > 2011-01-10 20:25:40,006 INFO org.mortbay.log Graceful shutdown > [email protected]:17283 > 2011-01-10 20:25:40,006 INFO org.mortbay.log Graceful shutdown > org.mortbay.jetty.servlet.Context@1672bbb{/,null} > 2011-01-10 20:25:40,006 INFO org.mortbay.log Graceful shutdown > org.mortbay.jetty.webapp.WebAppContext@18d30fb{/jsp,file:/home/ondra/work/Mavenhoe/trunk/target/classes/org/jboss/qa/mavenhoe/web/jsp} > 2011-01-10 20:25:43,007 INFO org.mortbay.log Stopped > [email protected]:17283 > 2011-01-10 20:25:43,009 WARN org.mortbay.log 1 threads could not be > stopped > 2011-01-10 20:25:45,010 INFO org.mortbay.log Shutdown hook executing > 2011-01-10 20:25:45,011 INFO org.mortbay.log Shutdown hook complete > > It blocks for exactly one minute, then shuts down. > I've added the Graceful shutdown, which should allow me to shut the server > down from a servlet; However, it does not work as you can see from the log. > > I've solved it this way: > > Server server = new Server( PORT ); > server.setGracefulShutdown( 3000 ); > server.setStopAtShutdown(true); > ... > server.start(); > > if( server.getThreadPool() instanceof QueuedThreadPool ){ > ((QueuedThreadPool) server.getThreadPool()).setMaxIdleTimeMs( 2000 ); > } > > `setMaxIdleTimeMs()` needs to be called after the `start()`, becase the > threadPool is created in `start()`. However, the threads are already created > and waiting, so it only applies after all threads are used at least once. > > I don't know what else to do except some awfulness like interrupting all > threads or `System.exit()`. > > Any ideas? Is there a good way? > > Thanks, > Ondra > > > --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email