On 6 Mar 2012, at 08:16, "André Warnier" <a...@ice-sa.com> wrote:

> Pid wrote:
>> On 06/03/2012 07:12, Rainer Frey wrote:
>>> On 05.03.2012, at 14:14, Philippe ROUXEL wrote:
>>>
>>>>>> When I set JAVA_OPTS= -Xmx1024m -Xss75m
>>>>> That means: each thread get a stack of 75MB. One of the following applies:
>>>>> * the operating system has a limit on thread stack size
>>>>> * the per process memory limit is reached before all initial tomcat 
>>>>> threads are started
>>>>> * the system runs out of total memory before all initial tomcat threads 
>>>>> are started
>>>>>
>>>>> 75MB thread stack size seems quite insane, the default is around 1-2MB. 
>>>>> Perhaps you meant to set -Xms (which sets the initial Java heap size)?
>>>> 75MB of stack is needed by hibenate to save the data aka a graph.
>>> I haven't used hibernate personally, but I never heard anything like that. 
>>> So please elaborate. Where did you get that information?
>>> Also what do you mean with "graph"? The graph of associated objects that 
>>> are updated by one hibernate call, or is your data actually graph data?
>>> If so, how is that mapped? do you have any self-referential associations?
>>> Is it really stack that you are talking about?
>> I'm also interested in the answers to these questions.
>
> Ok, to get back to the OP's original question/assumption :
>
> Assuming that "-Xss75M" tells the JVM to allocate 75 MB of memory for the 
> stack of each new thread created by the JVM, and noting that for a typical 
> Tomcat instance, a minimum of about 10 threads seem to be created (with an 
> additional one for each request being processed), this setting of "-Xss75M" 
> would mean that a minimum of 750 MB is being allocated for the threads' stack.
>
> Assuming on the other hand that this is a 32-bit system and JVM (the OP 
> didn't really say, but was mentioning Windows XP), where the maximum 
> addressable memory for a process is 4 GB (of which 1 GB more or less are used 
> by the OS itself); and considering the setting of -Xmx1024M for the Heap; and 
> considering that the rest of the JVM and Tomcat may use some 1024 MB by 
> themselves (for other things than the Heap and thread stacks);
> Considering all this thus, it is not really so surprising that the OP would 
> get an OOM error at some point.
>
> Noting on the other hand that the JVM stack should be mainly used to push and 
> pop subroutine/function parameters as they are being called, and that a 
> reasonable stack size seems to be around 512KB at most, this explains several 
> comments here which seem to put in doubt the wisdom of allocation 75 MB for 
> the stack of each Java thread.

75Mb is far too much for the thread stack size in a normal application.

I am not certain that it is necessarily fully allocated, just to
confuse matters further. I vaguely remember another discussion about
this, but can't find it in the archives.


p


> I am far from a specialist, but considering that Hibernate seems to be some 
> kind of "generic" tool, it is a bit unlikely that using it would require to 
> set the stack size to an amount that is at least 150 times the JVM default, 
> no ?
>
> All this seems to point - as usual - to some application problem, with as 
> Chris pointed out some runaway recursive function call or similar.
>
>
>
> ---------------------------------------------------------------------
> 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