The statement "It wastes memory, reduces CPU performance, and makes the GC
struggle with large heaps." reads like there is a catastrophe waiting and
is a bit overstated. It may waste memory usable by the JVM heap, true. But
it does not reduce CPU performance - OOP with LP64 is exercising memory and
cache bandwith, not CPU. And "GC struggle" is alone to the method how GC
works with heap objetcs - not related to OOP. In fact, GC is a bit slower
with compressed OOP because of the overhead of encoding/decoding addresses.

Jörg

On Fri, Mar 27, 2015 at 8:53 AM, Paweł Róg <pro...@gmail.com> wrote:

> Hi,
> Exactly, ES is optimized to use large objects (arrays of primitives). This
> makes me think that documentation sometimes can be misleading. You can see
> a bunch of places where "magic line" which shouldn't be crossed really
> appear:
>
> http://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html#compressed_oops
>
> http://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html
>
> --
> Paweł Róg
>
> On Thursday, March 26, 2015 at 6:08:26 PM UTC+1, Jörg Prante wrote:
>>
>> I will not doubt your numbers.
>>
>> The difference may depend on the application workload, how many heap
>> objects are created. ES is optimized to use very large heap objects to
>> decrease GC overhead. So I agree the difference  for ES may be closer to
>> 0.5 GB / 1 GB and not 8 GB.
>>
>> Jörg
>>
>> On Thu, Mar 26, 2015 at 4:44 PM, Paweł Róg <pro...@gmail.com> wrote:
>>
>>> Hi,
>>> Thanks for your response Jörg. Maybe I was not precise enough in my last
>>> e-mail. What I wanted to point out is that IMHO in ES I can get something
>>> different than ~30G (OOPs) == ~40G (no OOPs). As I wrote in my analysis for
>>> 16G reachable objects (with Xmx 30G)  from my calculations the overhead of
>>> disabled OOPs vs enabled OOPs is only 0.5G and for 100% heap usage (30G
>>> from Xmx 30G) it would be 1G. This means that 30G heap will be always less
>>> than eg. 32G or 33G heap in case of ES (at least for my query
>>> characteristics with lots of aggregations).
>>>
>>> So I again ask what are your thoughts about this? Did I make any mistake
>>> during my estimations?
>>>
>>> --
>>> Paweł Róg
>>>
>>> On Thursday, March 26, 2015 at 4:21:10 PM UTC+1, Jörg Prante wrote:
>>>>
>>>> There is no "trouble" at all, only a surprise effect to those who do
>>>> not understand the effect of compressed OOPs.
>>>>
>>>> Compressed OOPs solve a memory space efficiency problem but work
>>>> silently. The challenge is, large object pointers waste some of the CPU
>>>> memory bandwith when JVM must access objects on a 64bit addressable heap.
>>>> There is a price to pay for encoding/decoding pointers, and that is
>>>> performance. Most people prefer memory efficiency over speed, so current
>>>> Oracle JVM is now enabling compressed OOPs by default. And this feature
>>>> works only on heaps less than ~30GB. If you configure a larger heap (for
>>>> whatever reason) you lose compressed OOP feature silently. Then you get
>>>> better performance, but with less heap object capacity. At a heap size of
>>>> ~40G, you can again store as many heap objects as with ~30GB.
>>>>
>>>> Jörg
>>>>
>>>>
>>>> On Thu, Mar 26, 2015 at 2:28 PM, Paweł Róg <pro...@gmail.com> wrote:
>>>>
>>>>> Hi everyone,
>>>>> Every time we touch the size of JVM heap for Elasticsearch we can
>>>>> meet indisputable statement "don't let the heap to be bigger than 32GB -
>>>>> this is a magical line". Of course making heap bigger than 32G means that
>>>>> we lose OOPs. There are tons of blogs posts and articles which shows how
>>>>> switching OOPs influence on application heap usage (eg.
>>>>> https://blog.codecentric.de/en/2014/02/35gb-heap-less-32gb-
>>>>> java-jvm-memory-oddities/). Lets ask ourselves a question if this is
>>>>> a very big problem for ES&Lucene too.
>>>>>
>>>>> I analyzed a few heap dumps from ES. The maximum size of the heap was
>>>>> set below magical boundary (Xmx was 30GB). In all cases I can see similar
>>>>> pattern but let's discuss it based on a single example. One heap dump I
>>>>> took had around 16GB (slightly more) of reachable objects in it. There 
>>>>> were
>>>>> about 70M objects. Of course I cannot just take 70M to see how much of the
>>>>> heap I can save by having OOPs enabled but I also tried to analyze the
>>>>> number of references to objects (because some objects are referenced
>>>>> multiple times from multiple places). This gave me a number around 110M
>>>>> inbound references so OOPs let us save about 0.5GB of memory so when we 
>>>>> try
>>>>> to estimate, this would mean around *1GB* when whole the heap is currently
>>>>> in use (as I wrote earlier only 16GB of reachable objects were in heap) -
>>>>> for analyzed case. Moreover I can observe this:
>>>>>
>>>>> 2M objects of type long[] which take 6G of heap
>>>>> 280K objects of type double[] which take 4.5G of heap
>>>>> 10M objects of type byte[] which take 2.5G of heap
>>>>> 4.5M objects of type char[] which take 500M of heap
>>>>>
>>>>> When we sum all of sizes we can see 13.5GB of primitive arrays pointed
>>>>> by less than 20M references. As we can see ES&Lucene use a lot of arrays 
>>>>> of
>>>>> primitives.
>>>>>
>>>>> Elasticsearch is very "memory-hungry" especially when using
>>>>> aggregations, multi-dimensional aggregations and parent-child queries. I
>>>>> think sometimes it is reasonable to have a bigger heap if we have enough
>>>>> free resources.
>>>>>
>>>>> Of course we have to remember that the bigger heap means more work for
>>>>> GC (and currently used in JVM: CMS or G1 are not very efficient for large
>>>>> heaps), but ... Is there really a magical line (32GB) after crossing we 
>>>>> get
>>>>> into "JVM troubles" or we can find a lot of cases where crossing the
>>>>> magical boundary makes sense?
>>>>>
>>>>> I'm curious what are your thoughts in this area?
>>>>>
>>>>> --
>>>>> Paweł Róg
>>>>>
>>>>>
>>>>>  --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "elasticsearch" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to elasticsearc...@googlegroups.com.
>>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>>> msgid/elasticsearch/CAHngsdhSiXbdzYxss25f-JMpe5E5J545zLrW8tnK1e74K%
>>>>> 3D4tqg%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/elasticsearch/CAHngsdhSiXbdzYxss25f-JMpe5E5J545zLrW8tnK1e74K%3D4tqg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "elasticsearch" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to elasticsearc...@googlegroups.com.
>>> To view this discussion on the web visit https://groups.google.com/d/
>>> msgid/elasticsearch/0d6fd839-c412-476c-86a1-09c87b492544%
>>> 40googlegroups.com
>>> <https://groups.google.com/d/msgid/elasticsearch/0d6fd839-c412-476c-86a1-09c87b492544%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "elasticsearch" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elasticsearch+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elasticsearch/12b8a404-fa0a-4baa-a4cd-67bfe7ef2c66%40googlegroups.com
> <https://groups.google.com/d/msgid/elasticsearch/12b8a404-fa0a-4baa-a4cd-67bfe7ef2c66%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elasticsearch+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/CAKdsXoEK7gDNTwyOXNreQEAgb5FY6tnU_0sdmN_5-DXQgaQT%3DQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to