Files
i2p.i2p/apps/routerconsole
zzz 44d6e117d5 Console and Eepsite Jetty:
Switch back to QueuedThreadPool (ticket #1395)
In Jetty 5/6, the default QTP was not concurrent, so we switched to
ThreadPoolExecutor with a fixed-size queue, a set maxThreads,
and a RejectedExecutionPolicy of CallerRuns.
Unfortunately, CallerRuns causes lockups in Jetty NIO.
In addition, no flavor of TPE gives us what QTP does:
- TPE direct handoff (which we were using) never queues.
  This doesn't provide any burst management when maxThreads is reached.
  CallerRuns was an attempt to work around that.
- TPE unbounded queue does not adjust the number of threads.
  This doesn't provide automatic resource management.
- TPE bounded queue does not add threads until the queue is full.
  This doesn't provide good responsiveness to even small bursts.
QTP adds threads as soon as the queue is non-empty.
QTP as of Jetty 7 uses concurrent.
QTP unbounded queue is the default in Jetty.
So switch back to QTP with a bounded queue, which does what we want,
which is first expand the thread pool, then start queueing, then reject.

ref:
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html
https://wiki.eclipse.org/Jetty/Howto/High_Load
2014-10-20 14:01:36 +00:00
..
2014-10-20 14:01:36 +00:00
2014-09-23 12:18:23 +00:00

The routerconsole application is an embedable web server / servlet container.
In it there is a bundled routerconsole.war containing JSPs (per jsp/*) that
implement a web based control panel for the router.  This console gives the user
a quick view into how their router is operating and exposes some pages to 
configure it.

The web server itself is Jetty [1] and is contained within the various jar files
under lib/.  To embed this web server and the included router console, the 
startRouter script needs to be updated to include those jar files in the 
class path, plus the router.config needs appropriate entries to start up the
server:

  clientApp.3.main=net.i2p.router.web.RouterConsoleRunner
  clientApp.3.name=webConsole
  clientApp.3.args=7657 0.0.0.0 ./webapps/

That instructs the router to fire up the webserver listening on port 7657 on
all of its interfaces (0.0.0.0), loading up any .war files under the ./webapps/
directory.  The RouterConsoleRunner itself configures the Jetty server to give
the ./webapps/routerconsole.war control over the root context, directing a
request to http://localhost:7657/index.jsp to the routerconsole.war's index.jsp.
Any other .war file will be mounted under their filename's context (e.g. 
myi2p.war would be reachable at http://localhost:7657/myi2p/index.jsp).

[1] http://jetty.mortbay.com/jetty/index.html