Hi, Share piece of the code that produces the leak.
— Denis > On Jan 22, 2017, at 5:56 PM, Shawn Du <[email protected]> wrote: > > Hi, > > My application run overnight and crash again after I set max heap as 2G. For > I saw there were many Future Objects, > I guess it may be caused by Async API. Now I am using Sync API. It seems that > the memory issue disappeared. > My application memory kept at 60M. > > cache = cache.withAsync().withKeepBinary(); à > cache = cache.withKeepBinary(); > > I think this will not happens always, but real happened on some condition and > worthy further investigate. > > Thanks > Shawn > > 发件人: Shawn Du [mailto:[email protected]] > 发送时间: 2017年1月22日 17:36 > 收件人: [email protected] > 主题: RE: ignite client memory issue > > Hi, > > I am sure there are memory leaks. See below. > > Class Name > | > Objects | Shallow Heap | Retained Heap > --------------------------------------------------------------------------------------------------------------------------------------------- > java.lang.Thread > | > 128 | 15,360 | >= 879,574,832 > java.lang.ThreadLocal$ThreadLocalMap > | 100 | 2,400 | >= > 870,478,984 > java.lang.ThreadLocal$ThreadLocalMap$Entry[] > | 100 | 271,168 | >= > 870,476,576 > java.lang.ThreadLocal$ThreadLocalMap$Entry > | 23,153 | 740,896 | >= > 868,443,568 > org.apache.ignite.internal.processors.cache.IgniteCacheFutureImpl > | 22,444 | 359,104 | >= 867,056,800 > org.apache.ignite.internal.util.future.GridFutureAdapter$ChainFuture > | 22,444 | 1,436,416 | >= 866,697,704 > byte[] > > | 26,362 | 864,837,368 | >= 864,837,368 > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture| > 22,441 | 3,411,032 | >= 861,188,352 > org.apache.ignite.internal.binary.BinaryObjectImpl > | 22,441 | 897,640 | >= > 855,099,616 > --------------------------------------------------------------------------------------------------------------------------------------------- > > Now my application is still running, and the memory is growing up. Please > help. > > More information: > > Ignite version: 1.8.0 > java version "1.8.0_77" > Java(TM) SE Runtime Environment (build 1.8.0_77-b03) > Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode) > Platform: > Linux dev-s2 4.4.8-20.46.amzn1.x86_64 #1 SMP Wed Apr 27 19:28:52 UTC 2016 > x86_64 x86_64 x86_64 GNU/Linux > > > This is a new issue in my application. Recently we change our code. Add below > Class which implement > public class Column<T> implements Binarylizable > { > } > > Thanks. Please help. > > Shawn > > > 发件人: Shawn Du [mailto:[email protected] > <mailto:[email protected]>] > 发送时间: 2017年1月22日 13:52 > 收件人: [email protected] <mailto:[email protected]> > 主题: Re: ignite client memory issue > > Hi, > I assume this document for ignite server. In my case, I set ignite work at > client mode. > Now I increase the Max Heap Size and my application is running, I will > monitor the memory usage. > For my view, at client mode, ignite should not use too much memory. > > Thanks > Shawn > > 发件人: Denis Magda [mailto:[email protected] <mailto:[email protected]>] > 发送时间: 2017年1月22日 13:38 > 收件人: [email protected] <mailto:[email protected]> > 主题: Re: ignite client memory issue > > Also keep in mind that every Ignite node requires at least ~ 300 MB for its > internal purposes. This capacity planning page might be useful as well for > you: > https://apacheignite.readme.io/docs/capacity-planning-bak > <https://apacheignite.readme.io/docs/capacity-planning-bak> > > — > Denis > >> On Jan 21, 2017, at 9:29 PM, Shawn Du <[email protected] >> <mailto:[email protected]>> wrote: >> >> My heap max size is 768M. more than 500M are consumed by ignite. >> >> Your advice is quite reasonable. I will refactor my code. >> >> Thanks >> 发件人: Denis Magda [mailto:[email protected] <mailto:[email protected]>] >> 发送时间: 2017年1月22日 13:18 >> 收件人: [email protected] <mailto:[email protected]> >> 主题: Re: ignite client memory issue >> >> Hi Shawn, >> >> What is the maximum size of the heap? >> >> I don’t think the cache configurations can be a reason of the OOM. As a side >> note, there is no reason to keep the configurations at all. Once a cache is >> started with a configuration you can either keep a single reference to it >> and reuse by multiple app threads or get a new one by passing the cache name >> into a respective Ignite method. >> >> — >> Denis >> >>> On Jan 21, 2017, at 9:03 PM, Shawn Du <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> I review the code, find a never released HashMap which store some cache >>> configurations. >>> private Map<TableSchema, CacheConfiguration<String, BinaryObject>> >>> cacheConfigurations = new HashMap<>(); >>> I cache these configurations for performance consideration. >>> I get ignite cache by calling: >>> IgniteCache<String, BinaryObject> cache = >>> IgniteManager.getIgnite().getOrCreateCache(configuration); >>> >>> My question: >>> If cache configuration doesn’t release, it will prevent some memeory/cache >>> entries/something else release? >>> >>> Thanks >>> Shawn >>> >>> 发件人: Shawn Du [mailto:[email protected] >>> <mailto:[email protected]>] >>> 发送时间: 2017年1月22日 9:09 >>> 收件人: [email protected] <mailto:[email protected]> >>> 主题: ignite client memory issue >>> >>> Hi, >>> >>> My ignite client died many times recently because of OOM. Of course, I can >>> increase the Max heap size. But I want to know why these memory are not >>> released. >>> This is part of analysis of Eclipse Memory Analyzer. My ignite client use >>> Async cache API. please help. >>> >>> Class Name >>> | Objects | Shallow Heap | Retained Heap >>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- >>> java.lang.Thread >>> | 109 | 13,080 | >= 561,086,296 >>> java.lang.ThreadLocal$ThreadLocalMap >>> | 98 | 2,352 | >= 537,825,592 >>> java.lang.ThreadLocal$ThreadLocalMap$Entry[] >>> | 98 | 139,808 | >= 537,823,232 >>> java.lang.ThreadLocal$ThreadLocalMap$Entry >>> | 15,202 | 486,464 | >= 535,750,616 >>> org.apache.ignite.internal.processors.cache.IgniteCacheFutureImpl >>> | 14,476 | 231,616 | >= 534,866,208 >>> org.apache.ignite.internal.util.future.GridFutureAdapter$ChainFuture >>> | 14,476 | 926,464 | >= 534,634,600 >>> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture >>> | 14,466 | 2,198,832 | >= 531,444,584 >>> byte[] >>> | 18,438 | 530,369,360 | >= 530,369,360 >>> org.apache.ignite.internal.binary.BinaryObjectImpl >>> | 14,466 | 578,640 | >= 527,749,368 >>> >>> Thanks >>> Shawn
