The test node is behind a firewall. So I took some time to find a way to get
JMX diagnostic information from it.

What's interesting is, both the HeapMemoryUsage and NonHeapMemoryUsage
reported by JVM is quite reasonable.  So, it's a myth why the JVM process
maps such a big anonymous memory region...

$ java -Xmx128m -jar /tmp/cmdline-jmxclient-0.10.3.jar - localhost:8080
java.lang:type=Memory HeapMemoryUsage
12/16/2010 15:07:45 +0800 org.archive.jmx.Client HeapMemoryUsage:
committed: 1065025536
init: 1073741824
max: 1065025536
used: 18295328

$java -Xmx128m -jar /tmp/cmdline-jmxclient-0.10.3.jar - localhost:8080
java.lang:type=Memory NonHeapMemoryUsage
12/16/2010 15:01:51 +0800 org.archive.jmx.Client NonHeapMemoryUsage:
committed: 34308096
init: 24313856
max: 226492416
used: 21475376

If anybody is interested in it, I can provide more diagnostic information
before I restart the instance.

best regards,
hanzhu


On Thu, Dec 16, 2010 at 1:00 PM, Zhu Han <schumi....@gmail.com> wrote:

> After investigating it deeper,  I suspect it's native memory leak of JVM.
> The large anonymous map on lower address space should be the native heap of
> JVM,  but not java object heap.  Has anybody met it before?
>
> I'll try to upgrade the JVM tonight.
>
> best regards,
> hanzhu
>
>
>
> On Thu, Dec 16, 2010 at 10:50 AM, Zhu Han <schumi....@gmail.com> wrote:
>
>> Hi,
>>
>> I have a test node with apache-cassandra-0.6.8 on ubuntu 10.4.  The
>> hardware environment is an OpenVZ container. JVM settings is
>> # java -Xmx128m -version
>> java version "1.6.0_18"
>> OpenJDK Runtime Environment (IcedTea6 1.8.2) (6b18-1.8.2-4ubuntu2)
>> OpenJDK 64-Bit Server VM (build 16.0-b13, mixed mode)
>>
>> This is the memory settings:
>>
>> "/usr/bin/java -ea -Xms1G -Xmx1G ..."
>>
>> And the ondisk footprint of sstables is very small:
>>
>> "#du -sh data/
>>  "9.8M    data/"
>>
>> The node was infrequently accessed in the last  three weeks.  After that,
>> I observe the abnormal memory utilization by top:
>>
>>   PID USER      PR  NI  *VIRT*  *RES*  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  7836 root      15   0     *3300m* *2.4g*  13m S    0 26.0   2:58.51
>> java
>>
>> The jvm heap utilization is quite normal:
>>
>> #sudo jstat -gc -J"-Xmx128m" 7836
>>  S0C    S1C    S0U    S1U      *EC*       *EU*          *OC*            *
>> OU*            *PC           PU*          YGC  YGCT  FGC    FGCT
>> GCT
>> 8512.0 8512.0 372.8   0.0   *68160.0*   *5225.7*   *963392.0   508200.7
>> 30604.0 18373.4*    480    3.979      2      0.005    3.984
>>
>> And then I try "pmap" to see the native memory mapping. *There is two
>> large anonymous mmap regions.*
>>
>> 00000000080dc000 1573568K rw---    [ anon ]
>> 00002b2afc900000  1079180K rw---    [ anon ]
>>
>> The second one should be JVM heap.  What is the first one?  Mmap of
>> sstable should never be anonymous mmap, but file based mmap.  *Is it  a
>> native memory leak?  *Does cassandra allocate any DirectByteBuffer?
>>
>> best regards,
>> hanzhu
>>
>
>

Reply via email to