Right, this is the region I'm still using. And the disk store looks like
this:

Cache cache = new CacheFactory()
.set("locators", LOCATORS.get())
.set("start-locator", LOCATOR_IP.get()+"["+LOCATOR_PORT.get()+"]")
.set("bind-address", LOCATOR_IP.get())
.create();

cache.createDiskStoreFactory()
.setMaxOplogSize(500)
.setDiskDirsAndSizes(new File[] { new File("/opt/ccio/geode/store") }, new
int[] { 18000 })
.setCompactionThreshold(95)
.create("-ccio-store");

RegionFactory<String, byte[]> regionFactory = cache.createRegionFactory();
Region<String, byte[]> region = regionFactory
.setDiskStoreName("-ccio-store")
.setDataPolicy(DataPolicy.PERSISTENT_PARTITION)
.setOffHeap(false)
.setMulticastEnabled(false)
.setCacheLoader(new AwsS3CacheLoader())
.create("ccio-images");

I thought, since I have disk store specified the overflow if set.
Please correct me if I'm wrong.

Thank you,
Eugene

On Tue, Apr 26, 2016 at 3:40 PM, Udo Kohlmeyer <[email protected]>
wrote:

> Hi there Eugene,
>
> Geode will try and keep as much data in memory as it can, depending on LRU
> eviction strategy. Once data is overflowed to disk, the memory for the
> "value" would be freed up once GC has run.
>
> Is this still the correct region configuration you are using?
>
>  Region<String, byte[]> region = regionFactory
> .setDiskStoreName("-ccio-store")
> .setDataPolicy(DataPolicy.PERSISTENT_PARTITION)
> .setOffHeap(false)
> .setMulticastEnabled(false)
> .setCacheLoader(new AwsS3CacheLoader())
> .create("ccio-images");
>
> If not could you please provide your current config you are testing with?
> Because this config does not enable overflow.
>
>
> <http://geode.docs.pivotal.io/docs/reference/topics/memory_requirements_guidelines_and_calc.html#topic_ac4_mtz_j4>
> --Udo
>
>
> On 27/04/2016 4:51 am, Eugene Strokin wrote:
>
> Right, I do have 1432 objects in my cache. But I thought, only the keys
> will be in the memory, but the actual data would still be on the disk, and
> when a client would try to get it, the data would be retrieved from the
> storage.
> I'm expecting to keep millions records in the cache, but I don't have
> memory to keep all of them in there, so I've set up overflow to the disk,
> assuming, that the memory will be freed up when more and more data would be
> coming.
> Is my assumption wrong? Or I do need to have RAM for all the data?
>
> Thanks,
> Eugene
>
>
> On Tue, Apr 26, 2016 at 2:04 PM, Barry Oglesby <[email protected]>
> wrote:
>
>> The VersionedThinDiskRegionEntryHeapObjectKey are your region entries
>> (your data). When you restart your server, it recovers that data from disk
>> and stores it in those Region entries. Are you not meaning to persist your
>> data?
>>
>> If I run a quick test with 1432 objects with ~120k data size and
>> non-primitive keys, a histogram shows output like below. I deleted most of
>> the lines that are not relevant. You can see there are 1432
>> VersionedThinDiskRegionEntryHeapObjectKeys, TradeKeys (my key) and
>> VMCachedDeserializables (these are wrappers on the value). You should see
>> something similar. The byte arrays and character arrays are most of my data.
>>
>> If you configure your regions to not be persistent, you won't see any of
>> this upon recovery.
>>
>>  num     #instances         #bytes  class name
>> ----------------------------------------------
>>    1:          3229      172532264  [B
>>    2:         37058        3199464  [C
>>   27:          1432          80192
>>  
>> com.gemstone.gemfire.internal.cache.VersionedThinDiskRegionEntryHeapObjectKey
>>   41:          1432          34368  TradeKey
>>   42:          1432          34368
>>  com.gemstone.gemfire.internal.cache.VMCachedDeserializable
>> Total        256685      184447072
>>
>>
>> Thanks,
>> Barry Oglesby
>>
>>
>> On Tue, Apr 26, 2016 at 10:09 AM, Eugene Strokin < <[email protected]>
>> [email protected]> wrote:
>>
>>> Digging more into the problem, I've found that 91% of heap is taken by:
>>>
>>> 1,432 instances of
>>> *"com.gemstone.gemfire.internal.cache.VersionedThinDiskRegionEntryHeapObjectKey"*,
>>> loaded by *"sun.misc.Launcher$AppClassLoader @ 0xef589a90"* occupy 
>>> *121,257,480
>>> (91.26%)* bytes. These instances are referenced from one instance of
>>> *"com.gemstone.gemfire.internal.cache.ProxyBucketRegion[]"*, loaded by 
>>> *"sun.misc.Launcher$AppClassLoader
>>> @ 0xef589a90"*
>>>
>>> *Keywords*
>>>
>>> sun.misc.Launcher$AppClassLoader @ 0xef589a90
>>>
>>>
>>> com.gemstone.gemfire.internal.cache.VersionedThinDiskRegionEntryHeapObjectKey
>>>
>>> com.gemstone.gemfire.internal.cache.ProxyBucketRegion[]
>>>
>>>
>>> 1,432 instances doesn't sound like a lot, but looks like those are big
>>> instances, about 121k each. Maybe something wrong with my configuration,
>>> and I can limit creating such instances?
>>>
>>> Thanks,
>>> Eugene
>>>
>>> On Mon, Apr 25, 2016 at 4:19 PM, Jens Deppe < <[email protected]>
>>> [email protected]> wrote:
>>>
>>>> I think you're looking at the wrong info in ps.
>>>>
>>>> What you're showing is the Virtual size (vsz) of memory. This is how
>>>> much the process has requested, but that does not mean it is actually using
>>>> it. In fact, your output says that Java has reserved 3Gb of memory, not
>>>> 300Mb! You should instead look at the Resident Set Size (rss option) as
>>>> that will give you a much more accurate picture of what is actually using
>>>> real memory.
>>>>
>>>> Also, remember that the JVM also needs memory for loaded code (jars and
>>>> classes), JITed code, thread stacks, etc. so when setting your heap size
>>>> you should take that into account too.
>>>>
>>>> Finally, especially on virtualized hardware and doubly so on small
>>>> configs, make sure you *never, ever* end up swapping because that will
>>>> really kill your performance.
>>>>
>>>> --Jens
>>>>
>>>> On Mon, Apr 25, 2016 at 12:32 PM, Anilkumar Gingade <
>>>> <[email protected]>[email protected]> wrote:
>>>>
>>>>> >> It joined the cluster, and loaded data from overflow files.
>>>>> Not sure if this makes the OS file-system (disk buffer/cache) to
>>>>> consume memory...
>>>>> When you say overflow, I am assuming you are initializing the
>>>>> data/regions using persistence files, if so can you try without the
>>>>> persistence...
>>>>>
>>>>> -Anil.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Apr 25, 2016 at 12:18 PM, Eugene Strokin <
>>>>> <[email protected]>[email protected]> wrote:
>>>>>
>>>>>> And when I'm checking memory usage per process, it looks normal, java
>>>>>> took only 300Mb as it supposed to, but free -m still shows no memory:
>>>>>>
>>>>>> # ps axo pid,vsz,comm=|sort -n -k 2
>>>>>>   PID    VSZ
>>>>>>   465  26396 systemd-logind
>>>>>>   444  26724 dbus-daemon
>>>>>>   454  27984 avahi-daemon
>>>>>>   443  28108 avahi-daemon
>>>>>>   344  32720 systemd-journal
>>>>>>     1  41212 systemd
>>>>>>   364  43132 systemd-udevd
>>>>>> 27138  52688 sftp-server
>>>>>>   511  53056 wpa_supplicant
>>>>>>   769  82548 sshd
>>>>>> 30734  83972 sshd
>>>>>>  1068  91128 master
>>>>>> 28534  91232 pickup
>>>>>>  1073  91300 qmgr
>>>>>>   519 110032 agetty
>>>>>> 27029 115380 bash
>>>>>> 27145 115380 bash
>>>>>> 30736 116440 sort
>>>>>>   385 116720 auditd
>>>>>>   489 126332 crond
>>>>>> 30733 139624 sshd
>>>>>> 27027 140840 sshd
>>>>>> 27136 140840 sshd
>>>>>> 27143 140840 sshd
>>>>>> 30735 148904 ps
>>>>>>   438 242360 rsyslogd
>>>>>>   466 447932 NetworkManager
>>>>>>   510 527448 polkitd
>>>>>>   770 553060 tuned
>>>>>> 30074 2922460 java
>>>>>>
>>>>>> # free -m
>>>>>>               total        used        free      shared  buff/cache
>>>>>> available
>>>>>> Mem:            489         424           5           0          58
>>>>>>        41
>>>>>> Swap:           255          57         198
>>>>>>
>>>>>>
>>>>>> On Mon, Apr 25, 2016 at 2:52 PM, Eugene Strokin <
>>>>>> <[email protected]>[email protected]> wrote:
>>>>>>
>>>>>>> thanks for your help, but I still struggling with the System
>>>>>>> OOMKiller issue.
>>>>>>> I was doing more digging. And still couldn't find the problem.
>>>>>>> All settings are normal overcommit_memory=0, overcommit_ratio=50.
>>>>>>> free -m before the process starts:
>>>>>>>
>>>>>>> # free -m
>>>>>>>               total        used        free      shared  buff/cache
>>>>>>>   available
>>>>>>> Mem:            489          25         399           1          63
>>>>>>>         440
>>>>>>> Swap:           255          57         198
>>>>>>>
>>>>>>> I start my process like this:
>>>>>>>
>>>>>>> *java* -server -Xmx300m -Xms300m -XX:+HeapDumpOnOutOfMemoryError
>>>>>>> -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=55 -jar
>>>>>>> /opt/ccio-image.jar
>>>>>>>
>>>>>>> So, I should still have about 99Mb of free memory, but:
>>>>>>>
>>>>>>> # free -m
>>>>>>>               total        used        free      shared  buff/cache
>>>>>>>   available
>>>>>>> Mem:            489         409           6           1          73
>>>>>>>          55
>>>>>>> Swap:           255          54         201
>>>>>>>
>>>>>>> And I didn't even make a single call to the process yet. It joined
>>>>>>> the cluster, and loaded data from overflow files. And all my free 
>>>>>>> memory is
>>>>>>> gone. Even though I've set 300Mb max for Java.
>>>>>>> As I mentioned before, I've set off-heap memory setting to false:
>>>>>>>
>>>>>>> Cache cache = new CacheFactory()
>>>>>>> .set("locators", LOCATORS.get())
>>>>>>> .set("start-locator", LOCATOR_IP.get()+"["+LOCATOR_PORT.get()+"]")
>>>>>>> .set("bind-address", LOCATOR_IP.get())
>>>>>>> .create();
>>>>>>>
>>>>>>> cache.createDiskStoreFactory()
>>>>>>> .setMaxOplogSize(500)
>>>>>>> .setDiskDirsAndSizes(new File[] { new File("/opt/ccio/geode/store")
>>>>>>> }, new int[] { 18000 })
>>>>>>> .setCompactionThreshold(95)
>>>>>>> .create("-ccio-store");
>>>>>>>
>>>>>>> RegionFactory<String, byte[]> regionFactory =
>>>>>>> cache.createRegionFactory();
>>>>>>>
>>>>>>> Region<String, byte[]> region = regionFactory
>>>>>>> .setDiskStoreName("-ccio-store")
>>>>>>> .setDataPolicy(DataPolicy.PERSISTENT_PARTITION)
>>>>>>> .setOffHeap(false)
>>>>>>> .setMulticastEnabled(false)
>>>>>>> .setCacheLoader(new AwsS3CacheLoader())
>>>>>>> .create("ccio-images");
>>>>>>>
>>>>>>> I don't understand how the memory is getting overcommitted.
>>>>>>>
>>>>>>> Eugene
>>>>>>>
>>>>>>> On Fri, Apr 22, 2016 at 8:03 PM, Barry Oglesby <
>>>>>>> <[email protected]>[email protected]> wrote:
>>>>>>>
>>>>>>>> The OOM killer uses the overcommit_memory and overcommit_ratio
>>>>>>>> parameters to determine if / when to kill a process.
>>>>>>>>
>>>>>>>> What are the settings for these parameters in your environment?
>>>>>>>>
>>>>>>>> The defaults are 0 and 50.
>>>>>>>>
>>>>>>>> cat /proc/sys/vm/overcommit_memory
>>>>>>>> 0
>>>>>>>>
>>>>>>>> cat /proc/sys/vm/overcommit_ratio
>>>>>>>> 50
>>>>>>>>
>>>>>>>> How much free memory is available before you start the JVM?
>>>>>>>>
>>>>>>>> How much free memory is available when your process is killed?
>>>>>>>>
>>>>>>>> You can monitor free memory using either free or vmstat before and
>>>>>>>> during your test.
>>>>>>>>
>>>>>>>> Run free -m in a loop to monitor free memory like:
>>>>>>>>
>>>>>>>> free -ms2
>>>>>>>>              total       used       free     shared    buffers
>>>>>>>> cached
>>>>>>>> Mem:        290639      35021     255617          0       9215
>>>>>>>>  21396
>>>>>>>> -/+ buffers/cache:       4408     286230
>>>>>>>> Swap:        20473          0      20473
>>>>>>>>
>>>>>>>> Run vmstat in a loop to monitor memory like:
>>>>>>>>
>>>>>>>> vmstat -SM 2
>>>>>>>> procs -----------memory---------- ---swap-- -----io---- --system--
>>>>>>>> -----cpu-----
>>>>>>>>  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs
>>>>>>>> us sy id wa st
>>>>>>>>  0  0      0 255619   9215  21396    0    0     0    23    0    0
>>>>>>>>  2  0 98  0  0
>>>>>>>>  0  0      0 255619   9215  21396    0    0     0     0  121  198
>>>>>>>>  0  0 100  0  0
>>>>>>>>  0  0      0 255619   9215  21396    0    0     0     0  102  189
>>>>>>>>  0  0 100  0  0
>>>>>>>>  0  0      0 255619   9215  21396    0    0     0     0  110  195
>>>>>>>>  0  0 100  0  0
>>>>>>>>  0  0      0 255619   9215  21396    0    0     0     0  117  205
>>>>>>>>  0  0 100  0  0
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Barry Oglesby
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fri, Apr 22, 2016 at 4:44 PM, Dan Smith < <[email protected]>
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> The java metaspace will also take up memory. Maybe try setting
>>>>>>>>> -XX:MaxMetaspaceSize
>>>>>>>>>
>>>>>>>>> -Dan
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -------- Original message --------
>>>>>>>>> From: Eugene Strokin < <[email protected]>[email protected]>
>>>>>>>>> Date: 4/22/2016 4:34 PM (GMT-08:00)
>>>>>>>>> To: <[email protected]>
>>>>>>>>> [email protected]
>>>>>>>>> Subject: Re: System Out of Memory
>>>>>>>>>
>>>>>>>>> The machine is small, it has only 512mb RAM, plus 256mb swap.
>>>>>>>>> But java is set max heap size to 400mb. I've tried less, no help.
>>>>>>>>> And the most interesting part is that I don't see Java OOM Exceptions 
>>>>>>>>> at
>>>>>>>>> all. I even included a code with memory leak, and I saw the Java OOM
>>>>>>>>> Exceptions before the java process got killed then.
>>>>>>>>> I've browsed internet, and some people are actually noticed the
>>>>>>>>> same problem with other frameworks, not Geode. So, I'm suspecting this
>>>>>>>>> could be not Geode, but Geode was the first suspect because it has 
>>>>>>>>> off-heap
>>>>>>>>> storage feature. They say that there was a memory leak, but for some 
>>>>>>>>> reason
>>>>>>>>> OS was killing the process even before Java was getting OOM,
>>>>>>>>> I'll connect with JProbe, and will be monitoring the system with
>>>>>>>>> the console. Will let you know if I'll find something interesting.
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Eugene
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Apr 22, 2016 at 5:55 PM, Dan Smith < <[email protected]>
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> What's your -Xmx for your JVM set to, and how much memory does
>>>>>>>>>> your
>>>>>>>>>> droplet have? Does it have any swap space? My guess is you need to
>>>>>>>>>> reduce the heap size of your JVM and the OS is killing your
>>>>>>>>>> process
>>>>>>>>>> because there is not enough memory left.
>>>>>>>>>>
>>>>>>>>>> -Dan
>>>>>>>>>>
>>>>>>>>>> On Fri, Apr 22, 2016 at 1:55 PM, Darrel Schneider <
>>>>>>>>>> <[email protected]>[email protected]> wrote:
>>>>>>>>>> > I don't know why your OS would be killing your process which
>>>>>>>>>> seems like your
>>>>>>>>>> > main problem.
>>>>>>>>>> >
>>>>>>>>>> > But I did want you to know that if you don't have any regions
>>>>>>>>>> with
>>>>>>>>>> > off-heap=true then you have no reason to have
>>>>>>>>>> off-heap-memory-size to be set
>>>>>>>>>> > to anything other than 0.
>>>>>>>>>> >
>>>>>>>>>> > On Fri, Apr 22, 2016 at 12:48 PM, Eugene Strokin <
>>>>>>>>>> <[email protected]>[email protected]>
>>>>>>>>>> > wrote:
>>>>>>>>>> >>
>>>>>>>>>> >> I'm running load tests on the Geode cluster I've built.
>>>>>>>>>> >> The OS is killing my process occasionally, complaining that
>>>>>>>>>> the process
>>>>>>>>>> >> takes too much memory:
>>>>>>>>>> >>
>>>>>>>>>> >> # dmesg
>>>>>>>>>> >> [ 2544.932226 <%5B%202544.932226>] Out of memory: Kill
>>>>>>>>>> process 5382 (java) score 780 or
>>>>>>>>>> >> sacrifice child
>>>>>>>>>> >> [ 2544.933591 <%5B%202544.933591>] Killed process 5382 (java)
>>>>>>>>>> total-vm:3102804kB,
>>>>>>>>>> >> anon-rss:335780kB, file-rss:0kB
>>>>>>>>>> >>
>>>>>>>>>> >> Java doesn't have any problems, I don't see OOM exception.
>>>>>>>>>> >> Looks like Geode is using off-heap memory. But I set offHeap
>>>>>>>>>> to false for
>>>>>>>>>> >> my region, and I do have only one region:
>>>>>>>>>> >>
>>>>>>>>>> >> RegionFactory<String, byte[]> regionFactory =
>>>>>>>>>> cache.createRegionFactory();
>>>>>>>>>> >> regionFactory
>>>>>>>>>> >> .setDiskStoreName("-ccio-store")
>>>>>>>>>> >> .setDataPolicy(DataPolicy.PERSISTENT_PARTITION)
>>>>>>>>>> >> .setOffHeap(false)
>>>>>>>>>> >> .setCacheLoader(new AwsS3CacheLoader());
>>>>>>>>>> >>
>>>>>>>>>> >> Also, I've played with off-heap-memory-size setting, setting
>>>>>>>>>> it to small
>>>>>>>>>> >> number like 20M to prevent Geode to take too much off-heap
>>>>>>>>>> memory, but
>>>>>>>>>> >> result is the same.
>>>>>>>>>> >>
>>>>>>>>>> >> Do you have any other ideas what could I do here? I'm stack at
>>>>>>>>>> this point.
>>>>>>>>>> >>
>>>>>>>>>> >> Thank you,
>>>>>>>>>> >> Eugene
>>>>>>>>>> >
>>>>>>>>>> >
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Reply via email to