Hi Nicola,

This issue is most likely not related to Felix, so you'll probably get more
help on AEM forums. However, I would make the following points:

A CPU spike is not usually a symptom of a memory leak, so the logger issue
may be a red herring.

I've noticed myself that AEM 5.6.1 may have a memory leak if you redeploy
packages many times - usually it is related to the permgen memory (class
storage), and happens when a package is replaced but it's classloaders and
classes are not garbage collected (due to things like dangling references).

But for your issue I would use top to verify the CPU spike is actually
caused by AEM, and then probably run a profiler that can monitor threads to
see which thread is spiking.

Regards,
Ben
On 21 Jul 2015 8:43 am, "Nicola Abello" <[email protected]> wrote:

> I am currently using the Adobe Experience Manager (AEM also known as CQ)
> for a Client's site (Java platform). It uses OpenJDK:
>
> java version "1.7.0_65" OpenJDK Runtime Environment
> (rhel-2.5.1.2.el6_5-x86_64 u65-b17) OpenJDK 64-Bit Server VM (build
> 24.65-b04, mixed mode)
>
> It is running on Rackspace with the following:
>
> vCPU: 4 Memory: 16GB Guest OS: Red Hat Enterprise Linux 6 (64-bit)
>
> Since it has been in production I have been experiencing very slow
> performance on the part of the application. It goes like this I launch the
> app, everything is smooth then 7 to 10 days later the CPU usage spikes to
> 400% (~4000 users/day hit the site). The site becomes exceptionally slow
> and never becomes an OOM exception.
>
> Since I am a novice at Java Memory management I started reading about how
> it works and found tools like jstat and jmap. When the system was
> overwhelmed the second time around, I got a heap dump and dug into it.
>
> It all seems to be pointing out at org.slf4j.helpers.BasicMarkerFactory and
> org.slf4j.helpers.BasicMarker as when I analyze it with MAT eclipse I see
> that the biggest retained object by retained size is:
>
> org.slf4j.helpers.BasicMarkerFactory @ 0x6021a4f00Shallow Size: 16 B
> Retained Size: 6.8 GB
>
> and
>
> When I run a *Leak suspects report* I get the following result:
>
> DescriptionOne instance of "org.slf4j.helpers.BasicMarkerFactory"
> loaded by
> "org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5
> @ 0x60219a878" occupies 7,263,024,848 (96.71%) bytes. The memory is
> accumulated in one instance of
> "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "<system
> class loader>".
> Keywords
> java.util.concurrent.ConcurrentHashMap$Segment[]
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5 @
> 0x60219a878
> org.slf4j.helpers.BasicMarkerFactory
>
> and
>
> Shortest Paths To the Accumulation Point
> Class Name
>                      Shallow Heap    Retained Heap
>
> java.util.concurrent.ConcurrentHashMap$Segment[16] @ 0x6021a4f40
>                          80              7,263,024,784.... segments
> java.util.concurrent.ConcurrentHashMap @ 0x6021a4f10
>             48              7,263,024,832
>     .
>     ... markerMap org.slf4j.helpers.BasicMarkerFactory @ 0x6021a4f00
>                          16              7,263,024,848
>         .
>         ... markerFactory org.slf4j.impl.StaticMarkerBinder @
> 0x6021d3970                       16                         16
>             .
>             ... SINGLETON class org.slf4j.impl.StaticMarkerBinder @
> 0x6021d38f8                 8                          24
>                 .
>                 ... [328] java.lang.Object[640] @ 0x6021d2ee8
>                          2,576                   9,592
>                     .
>                     ... elementData java.util.Vector @ 0x6021d0fe0
>                          32                      9,624
>                         .
>                         ... classes
> org.apache.felix.framework.BundleWiringImpl$
>                             BundleClassLoaderJava5 @ 0x6021c32e0
>                          96                     26,888
>                             .
>                             ... <classloader> class
> ch.qos.logback.classic.Logger @
>                                 0x600be4310
>                          16                         16
>                             .   .
>                             .   ...<class>
> ch.qos.logback.classic.Logger @ 0x600282a78          48
>           48
>                             .
>                             ... <Java Local> java.lang.Thread @ 0x60077b450
>                                 pool-9-thread-1 Thread
>                          104                     3,344
>                                 .
>                                 ... <class>
> ch.qos.logback.classic.Logger @ 0x60025b850         48
>          48
>                                 .
>                                 ... <class>
> ch.qos.logback.classic.Logger @ 0x604b0a708         48
>          48
>                                 .
>                                 ... <class>
> ch.qos.logback.classic.Logger @ 0x604b0a6d8         48
>          48
>                                 .
>                                 ... <class>
> ch.qos.logback.classic.Logger @ 0x6049debe0         48
>          48
>                                 .
>                                 ... <class>
> ch.qos.logback.classic.Logger @ 0x604535228         48
>          48
>                                 .
>                                 ... <class>
> ch.qos.logback.classic.Logger @ 0x604124248         48
>         48
>
> Also when I run:
>
> $ sudo -u aem jmap -histo PID
>
>
>  num     #instances         #bytes  class
> name----------------------------------------------
>    1:      11460084      950827248  [C
>    2:      10740160      257763840  java.lang.String
>    3:       7681495      245807840
> java.util.concurrent.ConcurrentHashMap$HashEntry
>    4:       7563527      181524648  org.slf4j.helpers.BasicMarker
>    5:        217007      173568376  [I
>    6:        177602      158721184  [B
>    7:         60611       69739136
> [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;
>    8:       1147481       69348496  [Ljava.lang.Object;
>    9:       1797107       43130568
> org.apache.jackrabbit.oak.plugins.segment.RecordId
>   10:        208912       33824544  <constMethodKlass>
>   11:        570143       31928008  org.mozilla.javascript.ast.Name
>   12:         22350       27643920  <constantPoolKlass>
>   13:        208912       26752544  <methodKlass>
>   14:        821217       26278944  java.util.UUID
>   15:        793800       25401600  java.util.HashMap$Entry
>   16:        532946       21317840  org.mozilla.javascript.Node
>   17:        792296       19015104  java.lang.Long
>   18:        191294       18335600  [Ljava.util.HashMap$Entry;
>   19:         22350       16133328  <instanceKlassKlass>
>   20:        173883       15855152  [Ljava.lang.String;
>   21:        635690       15256560
>
> org.apache.sling.engine.impl.request.SlingRequestProgressTracker$TrackingEntry
>   22:         18509       14662848  <constantPoolCacheKlass>
>   23:        911112       14577792  java.lang.Integer
>   24:        255426       14303856
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeBuilder
>   25:        519324       12463776  java.util.ArrayList
>   26:        254643       12222864
> org.apache.jackrabbit.oak.core.SecureNodeBuilder
>   27:        137703       11016240  java.lang.reflect.Method
>   28:        312116        9987712
> org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState
>   29:         19236        9828448
> [Lorg.apache.jackrabbit.oak.plugins.segment.SegmentId;
>   30:        242179        9687160  java.util.TreeMap$Entry
>   31:        197121        9461808  java.util.HashMap
>   32:         15041        9416328  <methodDataKlass>
>   33:        387927        9310248
> org.apache.jackrabbit.oak.plugins.segment.MapRecord
>   34:        250049        8001568
> org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder$UnconnectedHead
>   35:        248586        7954752
> org.apache.jackrabbit.oak.core.MutableTree
>   36:        107865        7948112  [S
>   37:        191950        7678000  java.util.LinkedHashMap$Entry
>   38:        102212        6541568  org.mozilla.javascript.ast.PropertyGet
>   39:         37021        6515696  org.mozilla.javascript.ast.FunctionNode
>   40:        161905        6476200
> org.mozilla.javascript.ScriptableObject$Slot
> .....
> 8210:             1             16   org.slf4j.helpers.BasicMarkerFactory
>
> I noticed:
>
>    4:       7563527      181524648  org.slf4j.helpers.BasicMarker
>
> and
>
> 8210:             1             16  org.slf4j.helpers.BasicMarkerFactory
>
> When I go into the documentation of org.slf4j.helpers.BasicMarkerFacotry I
> see the following that gets my attention:
>
> detachMarkerpublic boolean detachMarker(String name)Description copied
> from interface: IMarkerFactoryDetach an existing marker.Note that
> after a marker is detached, there might still be "dangling" references
> to the detached marker.
> Specified by:
> detachMarker in interface IMarkerFactoryParameters:
> name - The name of the marker to detachReturns:
> whether the marker could be detached or not
>
> In particular:
>
> Note that after a marker is detached, there might still be "dangling"
> references to the detached marker.
>
>
>    1. Hopefully someone will be able to help pinpoint the cause of my
>    issues as I am a little lost here ?
>    2. Has anyone seen this before ?
>    3. How could I go about troubleshooting this issue furthermore ?
>    4. Do you agree that org.slf4j.helpers.BasicMarker and
>    org.slf4j.helpers.BasicMarkerFactory seem to be the root cause of my
> issues
>    ?
>    5. Is my logging configuration a suspect ?
>    6. Is this a slow memory leak or a performance tuning issue (in my
>    opinion seem like the memory leaks slowly over a week or so) ?
>    7. Perhaps "org.apache.felix.framework" is failing to free resources ?
>
> *Any advice is welcomed.*
>
> Thanks in advance.
>

Reply via email to