Hi Guys,

I hate to pick your brains on this as the customer should know how to do
this, but they tasked me to find out ;(

Is there any API or other method they can code that will give them an
indication of nearing this threshold? I know it's a crappy solution, but
I thought I'd ask anyway :) AFAIK, from the OS side there's really
nothing I can think of that would help.

Thanks for all your help, it's greatly appreciated by myself and the
entire team,
Danté

On 08/05/2011 12:14 PM, Mark Thomas wrote:
> On 05/08/2011 17:10, Dante Bell wrote:
>> This is probably a really dumb question, but say they implement
>> load-balanced Tomcat on 2 nodes for example. Would that then allow for
>> greater than 20 STMs for the servlets?
> It will allow them up to 20 concurrent requests per STM Servlet per
> Tomcat instance. What that means for actual users is difficult to judge
> since a single request may be routed through multiple servlets
> (including the same servlet several times). It will certainly increase
> capacity. From what to what is hard impossible to tell without knowing
> the application code.
>
> Mark
>
>> On 08/05/2011 12:00 PM, Mark Thomas wrote:
>>> On 05/08/2011 16:56, Dante Bell wrote:
>>>> Thanks!
>>>>
>>>> Like I said, I'm an OS/HW guy, never looked at java b4!
>>>>
>>>> They are saying that the load test has 20 'connections' so I'm guessing
>>>> that's the 20 STMs.
>>>>
>>>> Now, is this a fixable thing within the Java stack? Or is it an
>>>> application limitation?
>>> It looks to be hard-coded within Tomcat. I don't see a way to change
>>> that limit without building Tomcat from source.
>>>
>>> The other option is re-write the STM Servlet(s) as non-STM.
>>>
>>> Mark
>>>
>>>> Danté
>>>>
>>>> On 08/05/2011 11:12 AM, Mark Thomas wrote:
>>>>> On 05/08/2011 15:34, Dante Bell wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I'm running out of ideas on what to try for this customer. Their load
>>>>>> tests show that Tomcat is getting to a point where it no longer services
>>>>>> requests.
>>>>> Let me guess. It is fine for low loads but as soon as the load goes
>>>>> above a certain number (maybe around 20 concurrent users?) then
>>>>> everything starts going wrong?
>>>>>
>>>>>> Thread dumps show most threads in a wait state, but some are
>>>>>> runnable. I'm suspecting GC is the issue,
>>>>> On what basis? The thread dump clearly shows a different problem.
>>>>>
>>>>>> but in analyzing the logs it
>>>>>> shows the longest pause was 15 seconds, but that only happened once, and
>>>>>> most of the stats look OK to me.
>>>>> That would suggest that it isn't GC then wouldn't it.
>>>>>
>>>>>> Details can be found on my blog: http://wp.me/plPvN-ai
>>>>> All the information needed to diagnose this issue is in the thead dump.
>>>>> If you take a look at the first thread that is blocked:
>>>>> "TP-Processor40745" daemon prio=3 tid=0x03831400 nid=0xa888 in
>>>>> Object.wait() [0x2cd2f000..0x2cd2f870]
>>>>>    java.lang.Thread.State: WAITING (on object monitor)
>>>>>   at java.lang.Object.wait(Native Method)
>>>>>   at java.lang.Object.wait(Object.java:485)
>>>>>   at
>>>>> org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:854)
>>>>>   - locked <0x63a26708> (a java.util.Stack)
>>>>>   at
>>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
>>>>>   at
>>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>>>>
>>>>> And Bingo! we have found the problem.
>>>>>
>>>>> Now that stack trace might not ring alarm bells with someone unfamiliar
>>>>> with the Tomcat code base but if Tomcat is unresponsive, understanding
>>>>> why *any* thread is blocked would be a good place to start. If you look
>>>>> at line 854 and the surrounding code for StandardWrapper you will see
>>>>> that this is part of the Servlet allocation process. You should then
>>>>> realise that line 854 is part of Servlet allocation for Servlets that
>>>>> implement the SingleThreadModel (and now the alarm bells should be
>>>>> ringing loud and clear).
>>>>>
>>>>> Tomcat allocates a maximum of 20 instances of any STM servlet. Your
>>>>> client has an application that uses STM and requires many more than 20
>>>>> concurrent instances. Hence most requests are sat waiting for a STM
>>>>> instance to be released.
>>>>>
>>>>> Since that means there must be 20 instances of an STM Servlet already
>>>>> allocated, it is simple enough to grep the thread dump to find out which
>>>>> one. The winner is:
>>>>> com.motorola.nsm.common.ui.servlet.ValidateServlet
>>>>>
>>>>> Mark
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to