harmony-commits mailing list archives

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

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

Aleksey Shipilev commented on HARMONY-4001:

On Linux the situation even worse: mentioned test was run on 
Linux chameleon 2.6.5-7.191-bigsmp #1 SMP Tue Jun 28 14:58:56 UTC 2005 i686 i686 i386 GNU/Linux

I've made more accurate measurements, taking as reference some point during the run - when
VM has started but threads are not created. This point was used to throw away VM allocations
from the consideration. I'm taking the data from /proc/<pid>/status during the run.
Final metric was obtained as 

Kb-per-thread = [ VmSize(final) - VmSize(reference) ] / [ Threads(final) - Threads(reference)

Sun 1.5.0:

  3594 threads, 519 Kb/thread

  1661 threads, 519 Kb/thread

-server -Xss128k: 
  6359 threads, 136 Kb/thread

-server -Xms64M -Xmx64M -Xss128k: 
  13637 threads, 136 Kb/thread

Note that increasing in the thread count was achieved by limiting Java heap size.
As expected, default SS is 512k; changed by parameter reflect 128k.

And then, Harmony:

  752 threads, 2060 Kb/thread

  742 threads, 2058 Kb/thread

-Xem:server -Xms64M -Xmx64M: 
  839 threads, 2047 Kb/thread

So, on Linux there are 2 megabytes per thread!

> [drlvm][thread] DRLVM can't start more then ~1600 threads due to memory consumption (win32).
> --------------------------------------------------------------------------------------------
>                 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: ManyThreadsTest.java, 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