Hi guys,

Users frequently ask questions regarding memory tuning and heap usage; one
of the more common being: "why does top report resident memory usage larger
than -Xmx?".

I'd like to get some clarification on the usage patterns in Cassandra so I
write something up in the Wiki and generally answer questions better.

I understand that the -Xm(s|x) flags only affect the JVM managed heap, and
that memory is also allocated for the stack (per-thread), program code and
native heap. Of these, I can only see the native heap being a major
contributor to memory usage. Would I be right in saying that this is due to
Cassandra's liberal use of NIO direct ByteBuffers? I couldn't find a whole
lot of information on JVM memory usage, but what I did find[1] suggests that
these are allocated outside of the native heap (with only a pointer object
in the JVM heap).

If that's correct, what specifically are direct ByteBuffers used for and
when were they introduced? I seem to recall a lot of porting to ByteBuffers
in 0.7, yet our production 0.6 cluster exhibits a high non-JVM heap usage
that indicates otherwise.

If I'm way off the mark, please could you guys point me in the right
direction.


[1]: http://www.ibm.com/developerworks/java/library/j-nativememory-linux/

Cheers,

Nick Telford

Reply via email to