harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "weldon washburn (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-4001) [drlvm][threading] DRLVM can't start more then ~1600 threads due to memory consumption (win32).
Date Thu, 31 May 2007 06:39:16 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-4001?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12500297

weldon washburn commented on HARMONY-4001:

I hacked DRLVM os_thread.c then ran the attached version of ManyThreadsTest.java.

The modification to os_thread.c hardcodes _beginthreadex stacksize to be 16KB and 1MB.  Using
Windows Task Manager, its not clear how much virtual memory an app actually allocates.  There
is a column reporting "vm size" which shows substantially less memory consumed when running
with the 16KB stack.

The bottom line on above analysis:  DRLVM creates a max of 1635 threads with either 16KB stack
or 1MB stack.  If 1635 threads are not enough, then we probably have more problems to solve
in addition to the stack size.

The stack size is set in jthread_create_with_function().  It looks like something is not working
correctly with line 180:

... (attrs->stacksize)?attrs->stacksize:1024000,...

My guess is that line 180 is the root of the unchangeable 1MB stack size problem.

> [drlvm][threading] DRLVM can't start more then ~1600 threads due to memory consumption
> -----------------------------------------------------------------------------------------------
>                 Key: HARMONY-4001
>                 URL: https://issues.apache.org/jira/browse/HARMONY-4001
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>         Environment: Windows Server 2003 (32-bit)
>            Reporter: Sergey Kuksenko
>            Assignee: weldon washburn
>            Priority: Critical
>         Attachments: Test.java
> Attached test shown that DRLVM is not avaliable to have more then ~1600 threads running
> Even such empty threads as in the test.
> This bug is critical to running SpecJAppServer2004 because of even simple txRate=100
needs ~1300 running threads.
> The test tries to run 3000 simultaneously threads (doing nothing).
> RI pass the test succesfully.
> Perfmon data shows the following:
> - starting each thread adds (in average) 1.24M of memory to the process address space.
> - so the test on 1636 thread reached 2G Windows limit and hung up. 
> Setting to Sun1.6 -Xss1M options which significially increase stack size for each thread
leads to failure too (after 1827 thread). But RI throws the follwoing exception:
> Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
>         at java.lang.Thread.start0(Native Method)
>         at java.lang.Thread.start(Thread.java:597)
>         at Test.main(Test.java:17)
> 1. DRLVM should have the similar option for managing thread stack size.
> 2. DRLVM should correctly throw exception in this case.
> 3. default stack size shoule be less then 1M.
> I found that "vm\thread\src\thread_java_basic.c" has harcoded default thread stack size
as 1M. But setting it to 16K doesn't change the test behavior and even in this case I can
see with perfmon that each thread use 1.24M.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message