Perhaps lmax disruptor doesn't work properly in the IBM JVM?

On Tuesday, 18 March 2014, Chris Graham <chrisgw...@gmail.com> wrote:

> JStack is a Sun thing. This is the IBM JDK on AIX.
> I've run the tprof command twice and verified it.
>
> The full work though follows.
>
> The output from topas (same as top, effectively) is:
>
> Topas Monitor for host:    XXXXXXXXXXXXXXX      EVENTS/QUEUES    FILE/TTY
> Wed Mar 19 14:49:55 2014   Interval:  2         Cswitch    3581
> Readch      686
>                                                 Syscall    2763  Writech
> 1378
> CPU  User%  Kern%  Wait%  Idle%  Physc   Entc   Reads         7
> Rawin         0
> ALL   48.8    1.2    0.0   50.1   1.03   51.7   Writes        5
> Ttyout      643
>                                                 Forks         0
> Igets         0
> Network  KBPS   I-Pack  O-Pack   KB-In  KB-Out  Execs         0
> Namei        81
> Total     2.8     10.0     7.5     1.1     1.7  Runqueue    1.0
> Dirblk        0
>                                                 Waitqueue   0.0
> Disk    Busy%     KBPS     TPS KB-Read KB-Writ                   MEMORY
> Total     0.0      0.0     0.0     0.0     0.0  PAGING           Real,MB
> 20480
>                                                 Faults        3  % Comp
> 44
> FileSystem        KBPS     TPS KB-Read KB-Writ  Steals        0  % Noncomp
> 54
> Total              0.6     1.5    0.6    0.0    PgspIn        0  % Client
> 54
>                                                 PgspOut       0
> Name            PID  CPU%  PgSp Owner           PageIn        0  PAGING
> SPACE
> java        9437312  48.6 739.1 wasadmin        PageOut       0  Size,MB
> 15552
>
> Process with a PID of 9437312 is the WebSphere instance that runs Archiva,
> the problem in question.
>
> We then use a native AIX tool, tprof to examine that process, and see what
> it's doing:
>
> tprof -j -P 9437312 -skex sleep 60
>
> This generates sleep.prof, and the relevant section is:
>
> Configuration information
> =========================
> System: AIX 6.1 Node: au02qap207teax2 Machine: 00C43D204C00
> Tprof command was:
>     tprof -j -P 9437312 -skex sleep 60
> Trace command was:
>     /usr/bin/trace -ad -M -L 2438933299 -T 500000 -j
> 00A,001,002,003,38F,005,006,134,210,139,5A2,5A5,465,234,5D8, -o -
> Total Samples = 24008
> Traced Time = 60.02s (out of a total execution time of 60.02s)
>
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> Process                          Freq  Total Kernel   User Shared  Other
> Java
> =======                          ====  ===== ======   ==== ======  =====
> ====
> wait                                4  64.29  64.29   0.00   0.00   0.00
> 0.00
> java                              182  34.66   1.97   0.00  32.65   0.05
> 0.00
> /usr/sbin/syncd                     2   0.17   0.17   0.00   0.00   0.00
> 0.00
> sshd:                               1   0.14   0.09   0.05   0.01   0.00
> 0.00
> /usr/bin/ps                        13   0.12   0.10   0.00   0.03   0.00
> 0.00
> /usr/bin/sh                        27   0.12   0.11   0.00   0.00   0.00
> 0.00
> httpd                              12   0.09   0.05   0.01   0.03   0.00
> 0.00
> /usr/bin/scp                        1   0.09   0.07   0.00   0.01   0.00
> 0.00
> /opt/freeware/bin/readlink          6   0.04   0.04   0.00   0.00   0.00
> 0.00
> /usr/bin/tprof                      1   0.03   0.00   0.01   0.02   0.00
> 0.00
> kulagent                            7   0.03   0.02   0.00   0.00   0.00
> 0.00
> swapper                             1   0.02   0.02   0.00   0.00   0.00
> 0.00
> /usr/bin/grep                       5   0.02   0.02   0.00   0.00   0.00
> 0.00
> /usr/sbin/getty                     1   0.02   0.02   0.00   0.00   0.00
> 0.00
> kuxagent                            3   0.02   0.01   0.00   0.00   0.00
> 0.00
> lrud                                1   0.02   0.02   0.00   0.00   0.00
> 0.00
> srmAIX                              3   0.01   0.01   0.00   0.00   0.00
> 0.00
> /opt/tivoli/cit/bin/wscanuse        1   0.01   0.01   0.00   0.00   0.00
> 0.00
> psmd                                1   0.01   0.01   0.00   0.00   0.00
> 0.00
> xmgc                                1   0.01   0.01   0.00   0.00   0.00
> 0.00
> nfs_stat                            2   0.01   0.01   0.00   0.00   0.00
> 0.00
> /usr/bin/topasrec                   2   0.01   0.01   0.00   0.00   0.00
> 0.00
> /usr/bin/xmtopas                    1   0.01   0.00   0.00   0.00   0.00
> 0.00
> kcawd                               1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/sbin/snmpd                     1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/sbin/snmpmibd                  1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/bin/date                       1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/bin/entstat                    1   0.00   0.00   0.00   0.00   0.00
> 0.00
> gil                                 1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/bin/vmstat                     1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/bin/ln                         1   0.00   0.00   0.00   0.00   0.00
> 0.00
> stat_daemon                         1   0.00   0.00   0.00   0.00   0.00
> 0.00
> j2pg                                1   0.00   0.00   0.00   0.00   0.00
> 0.00
> /usr/sbin/netstat                   1   0.00   0.00   0.00   0.00   0.00
> 0.00
> =======                          ====  ===== ======   ==== ======  =====
> ====
> Total                             289 100.00  67.11   0.07  32.77   0.05
> 0.00
>
> Process               PID      TID  Total Kernel   User Shared  Other
> Java
> =======               ===      ===  ===== ======   ==== ======  =====
> ====
> java              9437312 46072057  23.76   0.05   0.00  23.70   0.00
> 0.00
>
> Which gives me the needed TID, 46072057 = 0x2BF00F9.
>
> So to trigger a non-fatal heap dump:
>
> kill -3 9437312
>
> and then we look into the created javacore.20140318.173250.9437312.0002.txt
> file for references to 0x2BF00F9:
>
> 3XMTHREADINFO      "AsyncLoggerConfig-1" J9VMThread:0x0000000031D14600,
> j9thread_t:0x00000100137D8BD0, java/lang/Thread:0x000000004301C508,
> state:CW, prio=5
> 3XMJAVALTHREAD            (java/lang/Thread getId:0x6A, isDaemon:true)
> 3XMTHREADINFO1            (native thread ID:0x2BF00F9, native priority:0x5,
> native policy:UNKNOWN)
> 3XMHEAPALLOC             Heap bytes allocated since last GC cycle=0 (0x0)
> 3XMTHREADINFO3           Java callstack:
> 4XESTACKTRACE                at sun/misc/Unsafe.park(Native Method)
> 4XESTACKTRACE                at
> java/util/concurrent/locks/LockSupport.parkNanos(LockSupport.java:332)
> 4XESTACKTRACE                at
>
> com/lmax/disruptor/SleepingWaitStrategy.applyWaitMethod(SleepingWaitStrategy.java:66)
> 4XESTACKTRACE                at
>
> com/lmax/disruptor/SleepingWaitStrategy.waitFor(SleepingWaitStrategy.java:39)
> 4XESTACKTRACE                at
>
> com/lmax/disruptor/ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:55)
> 4XESTACKTRACE                at
> com/lmax/disruptor/BatchEventProcessor.run(BatchEventProcessor.java:115)
> 4XESTACKTRACE                at
>
> java/util/concurrent/ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
> 4XESTACKTRACE                at
>
> java/util/concurrent/ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
> 4XESTACKTRACE                at java/lang/Thread.run(Thread.java:773)
> 3XMTHREADINFO3           Native callstack:
> 4XENATIVESTACK               _event_wait+0x2b8 (0x09000000007E7D3C
> [libpthreads.a+0x16d3c])
> 4XENATIVESTACK               _cond_wait_local+0x4e4 (0x09000000007F5A48
> [libpthreads.a+0x24a48])
> 4XENATIVESTACK               _cond_wait+0xbc (0x09000000007F6020
> [libpthreads.a+0x25020])
> 4XENATIVESTACK               pthread_cond_wait+0x1a8 (0x09000000007F6C8C
> [libpthreads.a+0x25c8c])
> 4XENATIVESTACK               (0x0900000001223014 [libj9thr26.so+0x6014])
> 4XENATIVESTACK               (0x0900000001222C60 [libj9thr26.so+0x5c60])
> 4XENATIVESTACK               (0x090000000116AE58 [libj9vm26.so+0xfe58])
> 4XENATIVESTACK               (0x090000000116B17C [libj9vm26.so+0x1017c])
> 4XENATIVESTACK               (0x0900000001810528
> [libjclscar_26.so+0x5c528])
> 4XENATIVESTACK               (0x0900000001813B98
> [libjclscar_26.so+0x5fb98])
> 4XENATIVESTACK               (0x0900000001161764 [libj9vm26.so+0x6764])
> 4XENATIVESTACK               (0x0900000001239CA0 [libj9prt26.so+0x2ca0])
> 4XENATIVESTACK               (0x09000000011615D4 [libj9vm26.so+0x65d4])
> 4XENATIVESTACK               (0x090000000121FAF4 [libj9thr26.so+0x2af4])
> 4XENATIVESTACK               _pthread_body+0xf0 (0x09000000007D4D34
> [libpthreads.a+0x3d34])
> NULL
>
> Would you like me to attach the complete sleep.tprof and javacore.txt file
> to the Jira ticket that I just created?
>
> https://issues.apache.org/jira/browse/LOG4J2-571
>
> Thanks for looking, this has been driving me nuts.
>
> -Chris
>
>
>
> On Wed, Mar 19, 2014 at 2:45 PM, Remko Popma <remko.po...@gmail.com>
> wrote:
>
> > Just to double-check: when using blocking wait, and running jstack, does
> > BlockingWaitStrategy appear in the stack trace?
> > Also, it it possible to double-check (perhaps attach VisualVM) that it
> > definitely is the AsyncLoggerConfig-1 thread that consumes so much CPU?
> >
> >
> > Sent from my iPhone
> >
> > > On 2014/03/19, at 12:31, Chris Graham <chrisgw...@gmail.com> wrote:
> > >
> > > I have tried both Block and Sleep (the default), but not Yield. No
> > > discernable difference.
> > >
> > >
> > >> On Wed, Mar 19, 2014 at 1:53 PM, Remko Popma <remko.po...@gmail.com>
> > wrote:
> > >>
> > >> As tweeted, I suggest trying the blocking wait strategy. Can you run a
> > >> jstack dump (and perhaps attach result to a Jira ticket)? In the
> > attached
> > >> stack trace below, the AsyncLoggerConfig-1 thread seems to be parked,
> > >> waiting for a new log event... Doesn't explain high CPU usage...
> > >>
> > >> Sent from my iPhone
> > >>
> > >>> On 2014/03/19, at 10:27, Chris Graham <chrisgw...@gmail.com> wrote:
> > >>>
> > >>> Hello Everyone.
> > >>>
> > >>> In this instance, I'm in indirect used of log4j2 2.0-rc1, as it's in
> > the
> > >>> web app that I'm using, Apache Archiva 2.0.1.
> > >>>
> > >>> The issue is that when running under WebSphere 8.5.0.2 (obviously on
> > the
> > >>> IBM JDK, 1.6) on AIX 6.1 TL8, Apache Archiva when it's doing nothing,
> > is
> > >>> sitting idle on around 50% CPU.
> > >>>
> > >>> Obviosuly, this is not good!
> > >>>
> > >>> I've performed the AIX native analysis, to get the native thread ID,
> > >> mapped
> > >>> it to a Java thread it, triggered a heap dump, and I've found this as
> > the
> > >>> culprit:
> > >>>
> > >>> 3XMTHREADINFO      "AsyncLoggerConfig-1"
> J9VMThread:0x0000000031D14600,
> > >>> j9thread_t:0x00000100137D8BD0, java/lang/Thread:0x000000004301C508,
> > >>> state:CW, prio=5
> > >>> 3XMJAVALTHREAD            (java/lang/Thread getId:0x6A,
> isDaemon:true)
> > >>> 3XMTHREADINFO1            (native thread ID:0x2BF00F9, native
> > >> priority:0x5,
> > >>> native policy:UNKNOWN)
> > >>> 3XMHEAPALLOC             Heap bytes allocated since last GC cycle=0
> > (0x0)
> > >>> 3XMTHREADINFO3           Java callstack:
> > >>> 4XESTACKTRACE                at sun/misc/Unsafe.park(Native Method)
> > >>> 4XESTACKTRACE                at
> > >>>
> java/util/concurrent/locks/LockSupport.parkNanos(LockSupport.java:332)
> > >>> 4XESTACKTRACE                at
> > >>
> >
> com/lmax/disruptor/SleepingWaitStrategy.applyWaitMethod(SleepingWaitStrategy.java:66)
> > >>> 4XESTACKTRACE



-- 
Matt Sicker <boa...@gmail.com>

Reply via email to