interesting, can you provide your webapp + configs for download and test?
Leon
On Tue, Jul 1, 2008 at 3:16 PM, Fredrik Tolf <[EMAIL PROTECTED]> wrote:
> On Tue, 2008-07-01 at 08:46 +0200, Leon Rosenberg wrote:
>> Hello Frederic,
>>
>> unless you are using the SingleThreaded Model (and you shouldn't)
>> tomcat does no such thing.
>
> There's no way I could be doing any such thing unknowingly, such as it
> being the default, right?
>
>> I assume the best way is to show us your servlet code, or to check for
>> synchronized blocks in it.
>
> The dispatch code is quite simple:
>
> protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
> try {
> req.setCharacterEncoding("UTF-8");
> resp.setCharacterEncoding("UTF-8");
> } catch(UnsupportedEncodingException e) {
> throw(new AssertionError(e));
> }
> try {
> if(req.getPathInfo().equals("/")) {
> redirect(req, resp, "/ls");
> } else if(req.getPathInfo().equals("/ls")) {
> req.setAttribute("db", load());
> Thread.sleep(10000);
> getServletContext().getNamedDispatcher("index")
> .forward(req, resp);
> } else if(req.getPathInfo().equals("/adm")) {
> req.setAttribute("db", load());
> Thread.sleep(10000);
> getServletContext().getNamedDispatcher("admin")
> .forward(req, resp);
> } else if(req.getPathInfo().equals("/css")) {
> getServletContext().getNamedDispatcher("style")
> .forward(req, resp);
> } else {
> error(req, resp, 404, "Resource not found");
> }
> } catch(Exception e) {
> log("Caught exception", e);
> error(req, resp, 500, "Internal error");
> }
> }
>
> You can see the Thread.sleep calls that I mentioned. The `load' function
> does no synchronization whatsoever.
>
> I followed Steffen Heil's advice on sending a SIGQUIT to Tomcat to get
> the thread dump, and the results are as follows:
>
> When I'm running one request to "/ls" and one to "/adm" simultaneously,
> there are indeed two threads in the doGet function above, one sleeping
> on the first Thread.sleep call and one on sleeping on the other.
>
> When, on the other hand, I'm running two requests to "/ls"
> simultaneously, there is only one thread from the pool in the doGet
> function. All other threads in the pool are sleeping with the following
> stack trace:
>
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> - waiting on <0x95401098> (a org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable)
> at java.lang.Object.wait(Object.java:485)
> at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:656)
> - locked <0x95401098> (a org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable)
> at java.lang.Thread.run(Thread.java:619)
>
> Except one, which is trying to accept a connection from the listening
> socket, but that seems to be the idle condition (it does that when I'm
> running the dual requests to "/ls" and "/adm" as well).
>
> By the way, this is Tomcat 5.5.17. Might that matter?
>
> Fredrik Tolf
>
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: [email protected]
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]