Thank you, it's help. because I have about 150G data in each node, so I setup the Heap to 8 giga, just want to make cassandra have enought space to cache key index.
I think reduce the heap size is valuable to try. Try to split one cassandra instance to 2 sub node, contains in one physical server, each instance have 4 giga heap space, each instance handle about 75 giga data, I will try it, and feed back if it was postive. BTW: Somebody in my team told me, that if the cassandra managed data was too huge( >15x than heap space) , will cause performance issues, is this true? Regards Santal 2010/2/21 Tatu Saloranta <tsalora...@gmail.com> > On Fri, Feb 19, 2010 at 7:40 PM, Santal Li <santal...@gmail.com> wrote: > > I meet almost same thing as you. When I do some benchmarks write test, > some > > times one Cassandra will freeze and other node will consider it was > shutdown > > and up after 30+ second. I am using 5 node, each node 8G mem for java > heap. > > > > From my investigate, it was caused by GC thread, because I start the > > JConsole and monitor with the memory heap usage, each time when the GC > > happend, heap usage will drop down from 6G to 1G, and check the casandra > > log, I found the freeze happend at exactly same times. > > With such a big heap, old generation GCs can definitely take a while. > With just 1.5 gig heap, and with somewhat efficient parallel > collection (on multi-core machine), we had trouble keeping collections > below 5 seconds. But this depends a lot on survival ratio -- less > garbage there is (and more live objects), slower things are. And > relationship is super-linear too, so processing 6 gig (or whatever > part of that is old generation space) can take a long time. > > It is certainly worth keeping in mind that more memory generally means > longer gc collection time. > > But Jonathan is probably right in that this alone would not cause > appearance of freeze -- rather, overload of GC blocking processing AND > accumulation of new requests sounds more plausible. > It is still good to consider both parts of the puzzle; preventing > overflow that can turn bad situation into catastrophe, and trying to > reduce impact of GC. > > > So I think when using huge memory(>2G), maybe need using some different > GC > > stratege other than the default one provide by Cassandra lunch script. > > Dose't anyone meet this situation, can you please provide some guide? > > There are many ways to change GC settings, and specifically trying to > reduce impact of old gen collections (young generation ones are less > often problematic, although they can be tuned as well). > Often there is a trade-off between frequency and impact of GC: to > simplify, less often you configure it to occur (like increase heap), > more impact it usually has when it does occur. > Concurrent collectors (like traditional CMS) are good for steady > state, and can keep oldgen GC from occuring maybe for hours (doing > incremental concurrent "partial" collections). But can also lead to > GC-from-hell when it must do full GC (since it's stop-the-world) kind. > > There is tons of information on how to deal with GC settings, but > unfortunately it is bit of black arts and very dependant on your > specific use case. There being dozens (more than a hundred I think) > different switches makes it actually trickier, since you also need to > learn which ones matter, and in what combinations. > > One somewhat counter-intuitive suggestion is to reduce size of heap at > least with respect to caching. So mostly try to just keep live working > set in memory, and not do caching inside Java process. Operating > systems are pretty good at caching disk pages; and if storage engine > is out of process (like native BDB), this can significantly reduce GC. > In-process caches can be really bad for GC activity, because their > contents are potentially long-living, yet relatively transient (that > is, neither mostly live, nor mostly garbage, making GC optimizer try > in vain to compact things). > But once again, this may or may not help, and needs to be experimented > with. > > Not sure if above helps, but I hope it gives at least some ideas, > > -+ Tatu +- >