In Sun Java System Web Server, acceptor threads on a listen socket accept connections and put them into a connection queue. Session threads then pick up connections from the queue and service the requests. The session threads post more session threads if required at the end of the request. The policy for adding new threads is based on the connection queue state:
Each time a new connection is returned, the number of connections waiting in the queue (the backlog of connections) is compared to the number of session threads already created. If it is greater than the number of threads, more threads are scheduled to be added the next time a request completes.
The previous backlog is tracked, so that if it is seen to be increasing over time, and if the increase is greater than the ThreadIncrement value, and the number of session threads minus the backlog is less than the ThreadIncrement value, then another ThreadIncrement number of threads are scheduled to be added.
The process of adding new session threads is strictly limited by the RqThrottle value.
To avoid creating too many threads when the backlog increases suddenly (such as the startup of benchmark loads), the decision as to whether more threads are needed is made only once every 16 or 32 times a connection is made based on how many session threads already exist.
The following directives that affect the number and timeout of threads, processes, and connections can be tuned in the Magnus Editor or magnus.conf:
AcceptTimeout
ConnQueueSize
HeaderBufferSize
KeepAliveThreads
KeepAliveTimeout
KernelThreads
ListenQ
MaxKeepAliveConnections
MaxProcs (UNIX Only)
PostThreadsEarly
RcvBufSize
RqThrottle
RqThrottleMin
SndBufSize
StackSize
StrictHttpHeaders
TerminateTimeout
ThreadIncrement
UseNativePoll (UNIX only)
For detailed information about these directives, see the Sun Java System Web Server 6.1 SP7 Administrator’s Configuration File Reference.