Java memory allocation profiler

Overview

Aprof - Java Memory Allocation Profiler

What is it?

The Aprof project is a Java Memory Allocation Profiler with very low performance impact on profiled application. It acts as an agent which transforms class bytecode by inserting counter increments wherever memory allocation is done.

Download

Download binaries of the latest release here:

.

Using Aprof

The profiled application should be run with additional JVM argument:

java -javaagent:aprof.jar <your-application>

To get help on configuration parameters, run

java -jar aprof.jar

Do not rename agent file "aprof.jar"!

Documentation

Documentation can be found at the project's homepage: https://code.devexperts.com/display/AProf/

How it works

See presentation on Joker Conference 2014: http://www.slideshare.net/elizarov/aprof-jocker-2014

Feedback

Feel free to submit feature requests and bug reports at [email protected]

Licensing

This software is licensed under the terms of GPL 3.0 found in the file named "LICENSE". The distribution also contains binaries from the ASM project, licensed under terms found in the file named "LICENSE.asm".

Comments
  • Deadlock with custom ClassLoader

    Deadlock with custom ClassLoader

    Found one Java-level deadlock:

    "ZipFileCache Dispose": waiting to lock monitor 0x39c1d47c (object 0x1af6bc50, a com.devexperts.aprof.transformer.ClassInfoCache), which is held by "AWT-EventQueue-0" "AWT-EventQueue-0": waiting to lock monitor 0x39c1d08c (object 0x1f7db2c8, a java.lang.Object), which is held by "ZipFileCache Dispose"

    Java stack information for the threads listed above:

    "ZipFileCache Dispose": at com.devexperts.aprof.transformer.ClassInfoCache.getOrInitClassInfoMap(ClassInfoCache.java) - waiting to lock <0x1af6bc50> (a com.devexperts.aprof.transformer.ClassInfoCache) at com.devexperts.aprof.transformer.AProfTransformer.transformImpl(AProfTransformer.java:80) at com.devexperts.aprof.transformer.AProfTransformer.transform(AProfTransformer.java:64) at sun.instrument.TransformerManager.transform(TransformerManager.java:188) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.lang.ClassLoader.defineClass(ClassLoader.java:642) at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:195) at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:191) at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:152) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) - locked <0x1bb5ae40> (a com.intellij.util.lang.UrlClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at gnu.trove.THashMap.values(THashMap.java:424) at com.intellij.openapi.util.io.ZipFileCache.getFilesToClose(ZipFileCache.java:149) - locked <0x1f7db2c8> (a java.lang.Object) at com.intellij.openapi.util.io.ZipFileCache.access$000(ZipFileCache.java:54) at com.intellij.openapi.util.io.ZipFileCache$1.run(ZipFileCache.java:79) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "AWT-EventQueue-0": at com.intellij.openapi.util.io.ZipFileCache.acquire(ZipFileCache.java:102) - waiting to lock <0x1f7db2c8> (a java.lang.Object) at com.intellij.util.lang.JarLoader.acquireZipFile(JarLoader.java:59) at com.intellij.util.lang.JarLoader.(JarLoader.java:42) at com.intellij.util.lang.ClassPath.getLoader(ClassPath.java:179) at com.intellij.util.lang.ClassPath.getLoader(ClassPath.java:137) - locked <0x1bd44828> (a com.intellij.util.lang.ClassPath) at com.intellij.util.lang.ClassPath.getResource(ClassPath.java:98) at com.intellij.util.lang.UrlClassLoader._getResource(UrlClassLoader.java:213) at com.intellij.util.lang.UrlClassLoader.getResourceAsStream(UrlClassLoader.java:221) at com.intellij.ide.plugins.cl.PluginClassLoader.getResourceAsStream(PluginClassLoader.java:160) at com.intellij.ide.plugins.cl.PluginClassLoader.getResourceAsStream(PluginClassLoader.java:164) at com.intellij.ide.plugins.cl.PluginClassLoader.getResourceAsStream(PluginClassLoader.java:164) at com.intellij.ide.plugins.cl.PluginClassLoader.getResourceAsStream(PluginClassLoader.java:164) at com.devexperts.aprof.transformer.ClassInfoCache.buildClassInfo(ClassInfoCache.java:225) at com.devexperts.aprof.transformer.ClassInfoCache.getOrBuildClassInfo(ClassInfoCache.java:43) - locked <0x1af6bc50> (a com.devexperts.aprof.transformer.ClassInfoCache) at com.devexperts.aprof.transformer.ClassInfoCache.initTrackedClasses(ClassInfoCache.java:91) at com.devexperts.aprof.transformer.ClassInfoCache.getOrInitClassInfoMap(ClassInfoCache.java:65) - locked <0x1af6bc50> (a com.devexperts.aprof.transformer.ClassInfoCache) at com.devexperts.aprof.transformer.AProfTransformer.transformImpl(AProfTransformer.java:80) at com.devexperts.aprof.transformer.AProfTransformer.transform(AProfTransformer.java:64) at sun.instrument.TransformerManager.transform(TransformerManager.java:188) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.lang.ClassLoader.defineClass(ClassLoader.java:642) at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:195) at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:191) at com.intellij.util.lang.UrlClassLoader._findClass(UrlClassLoader.java:167) at com.intellij.ide.plugins.cl.PluginClassLoader.b(PluginClassLoader.java:124) - locked <0x1d8ff338> (a com.intellij.ide.plugins.cl.PluginClassLoader) at com.intellij.ide.plugins.cl.PluginClassLoader.a(PluginClassLoader.java:77) at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:66) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:344) at com.intellij.openapi.extensions.impl.ExtensionComponentAdapter.loadClass(ExtensionComponentAdapter.java:159) at com.intellij.openapi.extensions.impl.ExtensionComponentAdapter.getComponentImplementation(ExtensionComponentAdapter.java:64) at com.intellij.openapi.extensions.impl.ExtensionComponentAdapter.getComponentInstance(ExtensionComponentAdapter.java:71) at com.intellij.openapi.extensions.impl.ExtensionComponentAdapter.getExtension(ExtensionComponentAdapter.java:122) at com.intellij.openapi.extensions.impl.ExtensionPointImpl.processAdapters(ExtensionPointImpl.java:246) at com.intellij.openapi.extensions.impl.ExtensionPointImpl.getExtensions(ExtensionPointImpl.java:195) - locked <0x1e315560> (a com.intellij.openapi.extensions.impl.ExtensionPointImpl) at com.intellij.openapi.extensions.Extensions.getExtensions(Extensions.java:110) at com.intellij.openapi.extensions.Extensions.getExtensions(Extensions.java:96) at com.intellij.openapi.components.impl.BasePathMacroManager.(BasePathMacroManager.java:48) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220) at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248) at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60) at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:236) at com.intellij.util.pico.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:223) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:210) at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77) at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217) at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53) at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248) at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60) at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:236) at com.intellij.util.pico.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:223) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:210) at org.picocontainer.alternatives.AbstractDelegatingMutablePicoContainer.getComponentInstance(AbstractDelegatingMutablePicoContainer.java:75) at com.intellij.openapi.application.impl.ApplicationImpl.getStateStore(ApplicationImpl.java:179) - locked <0x1d1faec0> (a com.intellij.openapi.application.impl.ApplicationImpl) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:496) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:492) at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:158) at com.intellij.idea.MainImpl$1$1$1.run(MainImpl.java:66) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744) at java.awt.EventQueue.access$400(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.awt.EventQueue$3.run(EventQueue.java:691) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:714) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:364) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

    Found 1 deadlock.

    opened by nicity 6
  • java.lang.VerifyError on start: Bad <init> method call from after the start of a try block

    java.lang.VerifyError on start: Bad method call from after the start of a try block

    Trying to start cassandra 2.0 got VerifyError at the startup:

    ERROR 14:59:24,243 [org.apache.cassandra.service.CassandraDaemon] Exception encountered during startup
    java.lang.VerifyError: Bad <init> method call from after the start of a try block
    Exception Details:
      Location:
        org/apache/cassandra/db/RowMutation.<init>(Ljava/lang/String;Ljava/nio/ByteBuffer;Lorg/apache/cassandra/db/ColumnFamily;)V @73: invokespecial
      Reason:
        Error exists in the bytecode
      Bytecode:
        0000000: 013a 042a 2b2c 2db6 003b 2d19 0459 c700
        0000010: 0a57 b801 a659 3a04 1120 ecb6 01af b800
        0000020: 4119 0459 c700 0a57 b801 a659 3a04 b601
        0000030: b2a7 0018 3a05 1904 59c7 000a 57b8 01a6
        0000040: 593a 04b6 01b2 1905 bfb7 0035 b1       
      Exception Handler Table:
        bci [30, 33] => handler: 52
      Stackmap Table:
        full_frame(@24,{UninitializedThis,Object[#258],Object[#264],Object[#60],Object[#419]},{UninitializedThis,Object[#258],Object[#264],Object[#286],Object[#60],Object[#419]})
        full_frame(@46,{UninitializedThis,Object[#258],Object[#264],Object[#60],Object[#419]},{UninitializedThis,Object[#258],Object[#264],Object[#113],Object[#419]})
        same_locals_1_stack_item_frame(@52,Object[#436])
        full_frame(@67,{UninitializedThis,Object[#258],Object[#264],Object[#60],Object[#419],Object[#436]},{Object[#419]})
        full_frame(@73,{UninitializedThis,Object[#258],Object[#264],Object[#60],Object[#419]},{UninitializedThis,Object[#258],Object[#264],Object[#113]})
    
        at org.apache.cassandra.net.MessagingService$2.<init>(MessagingService.java:258)
        at org.apache.cassandra.net.MessagingService.<clinit>(MessagingService.java:253)
        at org.apache.cassandra.service.StorageService.<init>(StorageService.java:293)
    

    it looks like is fails to gen bytecode when new statement is constructor, like here:

        public RowMutation(String keyspaceName, ByteBuffer key)
        {
            this(keyspaceName, key, new HashMap<UUID, ColumnFamily>());
        }
    
        public RowMutation(String keyspaceName, ByteBuffer key, ColumnFamily cf)
        {
            this(keyspaceName, key, Collections.singletonMap(cf.id(), cf));
        }
    
    
    opened by m0nstermind 6
  • VerifyError in Java 1.8.0_121

    VerifyError in Java 1.8.0_121

    I'm trying to use aprof in Hadoop with Java 1.8.0_121, but the VerifyError occurs as follows. Are there any methods to fix it? Thanks!

    Exception in thread "main" java.lang.VerifyError: Stack map does not match the one at exception handler 60
    Exception Details:
      Location:
        org/apache/hadoop/util/Shell$1.<init>(Lorg/apache/hadoop/util/Shell;Ljava/io/BufferedReader;Ljava/lang/StringBuffer;)V @60: astore
      Reason:
        Current frame's flags are not assignable to stack map frame's.
      Current Frame:
        bci: @38
        flags: { flagThisUninit }
        locals: { uninitializedThis, 'org/apache/hadoop/util/Shell', 'java/io/BufferedReader', 'java/lang/StringBuffer', 'com/devexperts/aprof/LocationStack' }
        stack: { 'java/lang/Throwable' }
      Stackmap Frame:
        bci: @60
        flags: { }
        locals: { top, 'org/apache/hadoop/util/Shell', 'java/io/BufferedReader', 'java/lang/StringBuffer', 'com/devexperts/aprof/LocationStack' }
        stack: { 'java/lang/Throwable' }
      Bytecode:
        0x0000000: 013a 042a 2bb5 0001 2a2c b500 022a 2db5
        0x0000010: 0003 2a19 0459 c700 0a57 b800 5759 3a04
        0x0000020: 111b bbb6 005b b700 0419 0459 c700 0a57
        0x0000030: b800 5759 3a04 b600 5ea7 0018 3a05 1904
        0x0000040: 59c7 000a 57b8 0057 593a 04b6 005e 1905
        0x0000050: bfb1                                   
      Exception Handler Table:
        bci [38, 41] => handler: 60
      Stackmap Table:
        full_frame(@32,{UninitializedThis,Object[#42],Object[#48],Object[#51],Object[#83]},{UninitializedThis,Object[#83]})
        full_frame(@54,{Object[#14],Object[#42],Object[#48],Object[#51],Object[#83]},{Object[#83]})
        full_frame(@60,{Top,Object[#42],Object[#48],Object[#51],Object[#83]},{Object[#96]})
        full_frame(@75,{Top,Object[#42],Object[#48],Object[#51],Object[#83],Object[#96]},{Object[#83]})
        full_frame(@81,{Object[#14],Object[#42],Object[#48],Object[#51],Object[#83]},{})
    
    	at sun.misc.Unsafe.allocateInstance(Native Method)
    	at com.devexperts.aprof.AProfSizeUtil.getObjectSizeByClass(AProfSizeUtil.java:106)
    	at com.devexperts.aprof.AProfOps.allocateSize(AProfOps.java:45)
    	at org.apache.hadoop.util.Shell.runCommand(Shell.java:506)
    
    opened by JerryLead 4
  • java-allocation-instrumenter

    java-allocation-instrumenter

    Hi, I was just wondering if you were aware of https://code.google.com/p/java-allocation-instrumenter/ ?

    If so, is there anything your aprof does that it doesn't?

    opened by fommil 4
  • java.lang.VerifyError: Stack map does not match the one at exception handler

    java.lang.VerifyError: Stack map does not match the one at exception handler

    I try to run aprof with Wildfly 8 (custom build, but does'nt matter). In short time after start Wildfly crash with message:

      [wildfly] =========================================================================
      [wildfly] 
      [wildfly]   JBoss Bootstrap Environment
      [wildfly] 
      [wildfly]   JBOSS_HOME: /media/data/Java/ws/jboss/tst/2/jboss-bas-8.2.1.krista20
      [wildfly] 
      [wildfly]   JAVA: /usr/lib/jvm/java-8-oracle/bin/java
      [wildfly] 
      [wildfly]   JAVA_OPTS:  -server -XX:+UseCompressedOops  -server -XX:+UseCompressedOops -Xbootclasspath/a:/media/data/Java/ws/jboss/tst/2/lib/asm-analysis.jar:/media/data/Java/ws/jboss/tst/2/lib/asm-commons.jar:/media/data/Java/ws/jboss/tst/2/lib/asm-tree.jar:/media/data/Java/ws/jboss/tst/2/lib/asm-util.jar:/media/data/Java/ws/jboss/tst/2/lib/asm.jar:/media/data/Java/ws/jboss/tst/2/lib/selftest.jar:/media/data/Java/ws/jboss/tst/2/lib/transformer.jar -javaagent:/media/data/Java/ws/jboss/tst/2/aprof.jar -Xms128m -Xmx1g -Djava.awt.headless=true -XX:NativeMemoryTracking=summary -Dru.krista.core.audit.storage.folder.src.sca=/media/data/Java/ws/jboss/tst/2/dir1 -Dru.krista.core.audit.storage.folder.dst.sca=/media/data/Java/ws/jboss/tst/2/dir2
      [wildfly] 
      [wildfly] =========================================================================
      [wildfly] 
      [wildfly] 2017-05-29T19:18:45.922+0300: aprof: Loading Aprof 31, Copyright (C) 2002-2017 Devexperts LLC...
      [wildfly] 2017-05-29T19:18:53.239+0300: aprof: Writing dump to file aprof.txt...
      [wildfly] 2017-05-29T19:18:53.754+0300: aprof: Writing dump to file aprof.txt... done
      [wildfly] 2017-05-29T19:18:53.813+0300: aprof: Loaded in 7846 ms with 6806 ms in transformer (1040 ms other)
      [wildfly] 19:18:56,171 INFO  [org.jboss.modules] (main) JBoss Modules version 1.3.3.Final
      [wildfly] java.lang.VerifyError: Stack map does not match the one at exception handler 40
      [wildfly] 2017-05-29T19:18:56.769+0300: aprof: Shutting down...Exception Details:
      [wildfly] 2017-05-29T19:18:56.770+0300: aprof: Writing dump to file aprof.txt...
      [wildfly] 
      [wildfly]   Location:
      [wildfly]     org/jboss/as/server/BootstrapImpl$ShutdownHook.<init>()V @40: astore_2
      [wildfly]   Reason:
      [wildfly]     Current frame's flags are not assignable to stack map frame's.
      [wildfly]   Current Frame:
      [wildfly]     bci: @20
      [wildfly]     flags: { flagThisUninit }
      [wildfly]     locals: { uninitializedThis, 'com/devexperts/aprof/LocationStack' }
      [wildfly]     stack: { 'java/lang/Throwable' }
      [wildfly]   Stackmap Frame:
      [wildfly]     bci: @40
      [wildfly]     flags: { }
      [wildfly]     locals: { top, 'com/devexperts/aprof/LocationStack' }
      [wildfly]     stack: { 'java/lang/Throwable' }
      [wildfly]   Bytecode:
      [wildfly]     0x0000000: 014c 2a2b 59c7 0009 57b8 008c 594c 111a
      [wildfly]     0x0000010: 46b6 008f b700 042b 59c7 0009 57b8 008c
      [wildfly]     0x0000020: 594c b600 92a7 0014 4d2b 59c7 0009 57b8
      [wildfly]     0x0000030: 008c 594c b600 922c bfb1               
      [wildfly]   Exception Handler Table:
      [wildfly]     bci [20, 23] => handler: 40
      [wildfly]   Stackmap Table:
      [wildfly]     full_frame(@14,{UninitializedThis,Object[#136]},{UninitializedThis,Object[#136]})
      [wildfly]     full_frame(@34,{Object[#27],Object[#136]},{Object[#136]})
      [wildfly]     full_frame(@40,{Top,Object[#136]},{Object[#49]})
      [wildfly]     full_frame(@52,{Top,Object[#136],Object[#49]},{Object[#136]})
      [wildfly]     full_frame(@57,{Object[#27],Object[#136]},{})
      [wildfly] 
      [wildfly]     at com.devexperts.aprof.AProfSizeUtil.getObjectSizeByClass(AProfSizeUtil.java:106)
      [wildfly]     at com.devexperts.aprof.AProfOps.allocateSize(AProfOps.java:45)
      [wildfly]     at org.jboss.as.server.BootstrapImpl.<init>(BootstrapImpl.java:60)
      [wildfly]     at org.jboss.as.server.Bootstrap$Factory.newInstance(Bootstrap.java:236)
      [wildfly]     at org.jboss.as.server.Main.main(Main.java:96)
      [wildfly]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [wildfly]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      [wildfly]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      [wildfly]     at java.lang.reflect.Method.invoke(Method.java:498)
      [wildfly]     at org.jboss.modules.Module.run(Module.java:312)
      [wildfly]     at org.jboss.modules.Main.main(Main.java:460)
      [wildfly] 2017-05-29T19:18:57.234+0300: aprof: Writing dump to file aprof.txt... done
      [wildfly] 2017-05-29T19:18:57.234+0300: aprof: Stopped after 3470 ms with 2331 ms in transformer (1139 ms other)
      [wildfly] Result: 1
    

    It's sad, but it's not so easy to start Wildfly with aprof due to JBoss Modules system. But I have write some scripts to prepare and run Widlfy with aprof integration. I will attach it latter.

    opened by vektory79 3
  •  AProf failed to process simple enum class

    AProf failed to process simple enum class

    We see this error in our logs, where it fails for a simple enum class.

    2017-03-20T11:39:03.949-0500: aprof: #1932 Failed to process: com.devexperts.logging.LogLevel [in sun.misc.Launcher$AppClassLoader@414493378] with error

    java.lang.RuntimeException [Loaded java.lang.Throwable$PrintStreamOrWriter from /opt/java/jdk1.8.0_112/jre/lib/rt.jar] [Loaded java.lang.Throwable$WrappedPrintWriter from /opt/java/jdk1.8.0_112/jre/lib/rt.jar] [Loaded java.util.IdentityHashMap$KeySet from /opt/java/jdk1.8.0_112/jre/lib/rt.jar] 2017-03-20T11:39:03.956-0500: aprof: java.lang.RuntimeException 2017-03-20T11:39:03.962-0500: aprof: at org.objectweb.asm.MethodVisitor.visitTypeAnnotation(Unknown Source) 73201 1216 s 2 java.io.BufferedOutputStream::flush (12 bytes) 73202 1217 2 java.io.OutputStream::flush (1 bytes) 2017-03-20T11:39:03.962-0500: aprof: at org.objectweb.asm.ClassReader.b(Unknown Source) 73202 1218 ! 2 com.devexperts.aprof.util.FastFmtUtil::print2 (146 bytes) 2017-03-20T11:39:03.963-0500: aprof: at org.objectweb.asm.ClassReader.accept(Unknown Source) 2017-03-20T11:39:03.964-0500: aprof: at org.objectweb.asm.ClassReader.accept(Unknown Source) 2017-03-20T11:39:03.964-0500: aprof: at com.devexperts.aprof.transformer.AProfTransformer.transformImpl(AProfTransformer.java:103) 2017-03-20T11:39:03.964-0500: aprof: at com.devexperts.aprof.transformer.AProfTransformer.transform(AProfTransformer.java:64) 2017-03-20T11:39:03.964-0500: aprof: at sun.instrument.TransformerManager.transform(TransformerManager.java:188) 2017-03-20T11:39:03.964-0500: aprof: at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) 2017-03-20T11:39:03.964-0500: aprof: at java.lang.ClassLoader.defineClass1(Native Method) 2017-03-20T11:39:03.965-0500: aprof: at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 73204 1219 ! 2 java.io.PrintWriter::println (27 bytes) LogLevel.zip

    73205 1220 ! 2 java.io.PrintWriter::newLine (66 bytes) 2017-03-20T11:39:03.965-0500: aprof: at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 2017-03-20T11:39:03.970-0500: aprof: at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 2017-03-20T11:39:03.970-0500: aprof: at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 2017-03-20T11:39:03.970-0500: aprof: at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 2017-03-20T11:39:03.970-0500: aprof: at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 2017-03-20T11:39:03.970-0500: aprof: at java.security.AccessController.doPrivileged(Native Method) 2017-03-20T11:39:03.970-0500: aprof: at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 2017-03-20T11:39:03.970-0500: aprof: at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 2017-03-20T11:39:03.970-0500: aprof: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 2017-03-20T11:39:03.970-0500: aprof: at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 2017-03-20T11:39:03.970-0500: aprof: at com.devexperts.logging.LoggingGroup.(LoggingGroup.java:18) 2017-03-20T11:39:03.971-0500: aprof: at com.devexperts.logging.LoggingGroup.(LoggingGroup.java:10) 2017-03-20T11:39:03.971-0500: aprof: at com.devexperts.logging.DynamicLogging.getLogger(DynamicLogging.java:39) 2017-03-20T11:39:03.971-0500: aprof: at com.devexperts.tos.backend.scriptcalculator.ScriptCalculator.(ScriptCalculator.java:71)

    bug 
    opened by krilak 1
  • AProf exception in AProfOps.allocateSize

    AProf exception in AProfOps.allocateSize

    We received the following error in our logs after enabling aprof. We are using jdk 1.8.0_112:

    `2017-04-19T09:17:57.943-0500: aprof: #1552 Failed to process: com.devexperts.tos.qdext.volatility.VolatilityContainer [in sun.misc.Launcher$AppClassLoader@414493378] with error

    java.lang.RuntimeException 2017-04-19T09:17:57.943-0500: aprof: java.lang.RuntimeException 14419 1475 3 java.lang.StringBuilder::charAt (6 bytes) 14419 1476 3 java.lang.AbstractStringBuilder::charAt (49 bytes) 2017-04-19T09:17:57.943-0500: aprof: at org.objectweb.asm.MethodVisitor.visitTypeAnnotation(Unknown Source) 2017-04-19T09:17:57.943-0500: aprof: at org.objectweb.asm.ClassReader.b(Unknown Source) 2017-04-19T09:17:57.943-0500: aprof: at org.objectweb.asm.ClassReader.accept(Unknown Source) 2017-04-19T09:17:57.943-0500: aprof: at org.objectweb.asm.ClassReader.accept(Unknown Source) 2017-04-19T09:17:57.943-0500: aprof: at com.devexperts.aprof.transformer.AProfTransformer.transformImpl(AProfTransformer.java:103) 2017-04-19T09:17:57.943-0500: aprof: at com.devexperts.aprof.transformer.AProfTransformer.transform(AProfTransformer.java:64) 2017-04-19T09:17:57.943-0500: aprof: at sun.instrument.TransformerManager.transform(TransformerManager.java:188) 2017-04-19T09:17:57.943-0500: aprof: at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) 2017-04-19T09:17:57.943-0500: aprof: at java.lang.ClassLoader.defineClass1(Native Method) 2017-04-19T09:17:57.943-0500: aprof: at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 2017-04-19T09:17:57.943-0500: aprof: at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 2017-04-19T09:17:57.943-0500: aprof: at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 2017-04-19T09:17:57.943-0500: aprof: at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 2017-04-19T09:17:57.944-0500: aprof: at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 2017-04-19T09:17:57.944-0500: aprof: at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 2017-04-19T09:17:57.944-0500: aprof: at java.security.AccessController.doPrivileged(Native Method) 2017-04-19T09:17:57.944-0500: aprof: at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 2017-04-19T09:17:57.944-0500: aprof: at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 2017-04-19T09:17:57.944-0500: aprof: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 2017-04-19T09:17:57.944-0500: aprof: at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 2017-04-19T09:17:57.944-0500: aprof: at com.devexperts.tos.qdext.volatility.VolatilityObjField.(VolatilityObjField.java:39) 2017-04-19T09:17:57.944-0500: aprof: at sun.misc.Unsafe.allocateInstance(Native Method) 2017-04-19T09:17:57.944-0500: aprof: at com.devexperts.aprof.AProfSizeUtil.getObjectSizeByClass(AProfSizeUtil.java:102) 2017-04-19T09:17:57.944-0500: aprof: at com.devexperts.aprof.AProfOps.allocateSize(AProfOps.java:41) ` This seems to be related to the following line in VolatilityObjField: private static final String ILLEGAL_VALUE_MSG_TEMPLATE = "Illegal value: %s, must be " + VolatilityContainer.class.getName();

    bug 
    opened by krilak 1
  • [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    mitm_build


    This is a security fix for a vulnerability in your Apache Maven pom.xml file(s).

    The build files indicate that this project is resolving dependencies over HTTP instead of HTTPS. This leaves your build vulnerable to allowing a Man in the Middle (MITM) attackers to execute arbitrary code on your or your computer or CI/CD system.

    This vulnerability has a CVSS v3.0 Base Score of 8.1/10.

    POC code has existed since 2014 to maliciously compromise a JAR file in-flight. MITM attacks against HTTP are increasingly common, for example Comcast is known to have done it to their own users.

    This contribution is a part of a submission to the GitHub Security Lab Bug Bounty program.

    Detecting this and Future Vulnerabilities

    This vulnerability was automatically detected by LGTM.com using this CodeQL Query.

    As of September 2019 LGTM.com and Semmle are officially a part of GitHub.

    You can automatically detect future vulnerabilities like this by enabling the free (for open-source) LGTM App.

    I'm not an employee of GitHub nor of Semmle, I'm simply a user of LGTM.com and an open-source security researcher.

    Source

    Yes, this contribution was automatically generated, however, the code to generate this PR was lovingly hand crafted to bring this security fix to your repository.

    The source code that generated and submitted this PR can be found here: JLLeitschuh/bulk-security-pr-generator

    Opting-Out

    If you'd like to opt-out of future automated security vulnerability fixes like this, please consider adding a file called .github/GH-ROBOTS.txt to your repository with the line:

    User-agent: JLLeitschuh/bulk-security-pr-generator
    Disallow: *
    

    This bot will respect the ROBOTS.txt format for future contributions.

    Alternatively, if this project is no longer actively maintained, consider archiving the repository.

    CLA Requirements

    This section is only relevant if your project requires contributors to sign a Contributor License Agreement (CLA) for external contributions.

    It is unlikely that I'll be able to directly sign CLAs. However, all contributed commits are already automatically signed-off.

    The meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see https://developercertificate.org/ for more information).

    - Git Commit Signoff documentation

    If signing your organization's CLA is a strict-requirement for merging this contribution, please feel free to close this PR.

    Tracking

    All PR's generated as part of this fix are tracked here: https://github.com/JLLeitschuh/bulk-security-pr-generator/issues/2

    opened by JLLeitschuh 1
  • aprof does not work with Java 11

    aprof does not work with Java 11

    aprof does not work with Java 11

    Bumping asm version to 7.1 allows building artifact but aprof-selftest fails with exception:

    [INFO] --- maven-antrun-plugin:1.7:run (aprof-selftest) @ agent ---
    [INFO] Executing tasks
    
    main:
         [java] 2019-04-08T14:46:55.151+0300: aprof: Loading Aprof 33-SNAPSHOT, Copyright (C) 2002-2017 Devexperts LLC...
         [java] Exception in thread "main" java.lang.reflect.InvocationTargetException
         [java] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         [java] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
         [java] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
         [java] 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
         [java] 	at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
         [java] 	at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
         [java] Caused by: java.lang.VerifyError
         [java] 	at java.instrument/sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
         [java] 	at java.instrument/sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:193)
         [java] 	at com.devexperts.aprof.AProfAgent.redefine(AProfAgent.java:211)
         [java] 	at com.devexperts.aprof.AProfAgent.go(AProfAgent.java:124)
         [java] 	at com.devexperts.aprof.AProfAgent.premain(AProfAgent.java:72)
         [java] 	... 6 more
         [java] FATAL ERROR in native method: processing of -javaagent failed
    
    
    alex@Bubunta:~/aprof$ java -version
    openjdk version "11.0.1" 2018-10-16
    OpenJDK Runtime Environment (build 11.0.1+13-Ubuntu-3ubuntu118.04ppa1)
    OpenJDK 64-Bit Server VM (build 11.0.1+13-Ubuntu-3ubuntu118.04ppa1, mixed mode, sharing)
    
    opened by ashananin 0
  • aprof not able to initialize the LocationStack

    aprof not able to initialize the LocationStack

    Hi team,

    We tried to integrate JBoss 7 with aprof. During the process JVM exited within few mins throwing class not found error . JDK used 1.7 U45 .Have listed the error stack trace plz review and let us know

    --> Wrapper Started as Daemon STATUS | wrapper | 2018/03/26 11:57:25 | Java Service Wrapper Community Edition 64-bit 3.5.22 STATUS | wrapper | 2018/03/26 11:57:25 | Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved. STATUS | wrapper | 2018/03/26 11:57:25 | http://wrapper.tanukisoftware.com STATUS | wrapper | 2018/03/26 11:57:25 | STATUS | wrapper | 2018/03/26 11:57:25 | Launching a JVM... INFO | jvm 1 | 2018/03/26 11:57:27 | 2018-03-26T11:57:27.343-0700: aprof: Loading Aprof 32, Copyright (C) 2002-2017 Devexperts LLC... INFO | jvm 1 | 2018/03/26 11:57:39 | 2018-03-26T11:57:39.425-0700: aprof: Writing dump to file aprof.txt... INFO | jvm 1 | 2018/03/26 11:57:40 | 2018-03-26T11:57:40.151-0700: aprof: Writing dump to file aprof.txt... done INFO | jvm 1 | 2018/03/26 11:57:40 | 2018-03-26T11:57:40.315-0700: aprof: Loaded in 12829 ms with 11088 ms in transformer (1741 ms other) INFO | jvm 1 | 2018/03/26 11:57:42 | WrapperManager: Initializing... INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp: INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: Encountered an error running main: INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: java.lang.NoClassDefFoundError: com/devexperts/aprof/LocationStack INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.logmanager.LogManager.(LogManager.java:217) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.lang.reflect.Constructor.newInstance(Constructor.java:526) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.lang.Class.newInstance(Class.java:374) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.util.logging.LogManager$1.run(LogManager.java:184) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.security.AccessController.doPrivileged(Native Method) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.util.logging.LogManager.(LogManager.java:173) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.modules.Main.main(Main.java:278) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.lang.reflect.Method.invoke(Method.java:606) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:290) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at java.lang.Thread.run(Thread.java:744) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: Caused by: java.lang.ClassNotFoundException: com.devexperts.aprof.LocationStack from [Module "org.jboss.logmanager:main" from local module loader @2c5ac6ce (roots: /x/web/STAGE2MA106834/fundingpolicyserv/standalone/modules,/x/opt/infra-jboss-as-7.1tls12/modules,/x/web/STAGE2MA106834/logs/fundingpolicyserv/logs)] INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) INFO | jvm 1 | 2018/03/26 11:57:49 | WrapperSimpleApp Error: ... 16 more INFO | jvm 1 | 2018/03/26 11:57:51 | Exception in thread "Thread-1" java.lang.NoClassDefFoundError: Could not initialize class java.util.logging.LogManager INFO | jvm 1 | 2018/03/26 11:57:51 | at java.util.logging.LogManager$Cleaner.run(LogManager.java:237) INFO | jvm 1 | 2018/03/26 11:57:51 | 2018-03-26T11:57:50.948-0700: aprof: Shutting down... INFO | jvm 1 | 2018/03/26 11:57:51 | 2018-03-26T11:57:50.949-0700: aprof: Writing dump to file aprof.txt... INFO | jvm 1 | 2018/03/26 11:57:51 | 2018-03-26T11:57:51.396-0700: aprof: Writing dump to file aprof.txt... done INFO | jvm 1 | 2018/03/26 11:57:51 | 2018-03-26T11:57:51.397-0700: aprof: Stopped after 11232 ms with 4584 ms in transformer (6648 ms other) STATUS | wrapper | 2018/03/26 11:57:51 | <-- Wrapper Stopped

    Thanks Sattish

    opened by sattishv 0
  • Percent format

    Percent format

    I see this output:

    SomeOtherClass.OtherMethod: 2,342,864 (6.93%) bytes in 48,242 (8.43%) objects (avg size 49 bytes)
    SomeClass.SomeMethod:       5,491,856 (0.02%) bytes in 343,241 (0.10%) objects (avg size 16 bytes)
    

    It is confused me. Why OtherMethod is 6.93 %, when SomeMethod is 0.02%, if 2,342,864 < 5,491,856? Is it right that this percentage is calculated as

    garbage_produced_by(SomeClass.SomeMethod) / total_produced_garbage(343,241 objects using SomeClass.SomeMethod) * 100 %
    

    ?

    opened by egorlitvinenko 0
Releases(aprof-32)
Owner
Devexperts
Devexperts open source projects
Devexperts
Sampling CPU and HEAP profiler for Java featuring AsyncGetCallTrace + perf_events

async-profiler This project is a low overhead sampling profiler for Java that does not suffer from Safepoint bias problem. It features HotSpot-specifi

null 5.8k Jan 3, 2023
Java monitoring for the command-line, profiler included

jvmtop is a lightweight console application to monitor all accessible, running jvms on a machine. In a top-like manner, it displays JVM internal metri

null 1.2k Jan 6, 2023
JVM Profiler Sending Metrics to Kafka, Console Output or Custom Reporter

Uber JVM Profiler Uber JVM Profiler provides a Java Agent to collect various metrics and stacktraces for Hadoop/Spark JVM processes in a distributed w

Uber Common 1.7k Dec 22, 2022
Simple JVM Profiler Using StatsD and Other Metrics Backends

statsd-jvm-profiler statsd-jvm-profiler is a JVM agent profiler that sends profiling data to StatsD. Inspired by riemann-jvm-profiler, it was primaril

Etsy, Inc. 330 Oct 30, 2022
Java Agent for Memory Measurements

Overview Jamm provides MemoryMeter, a Java agent for all Java versions to measure actual object memory use including JVM overhead. Use To use MemoryMe

Jonathan Ellis 624 Dec 28, 2022
Tools for tracking down memory / JVM problems & generating predictable-as-possible VM behaviour

Hawkshaw Tools for tracking down memory / JVM problems & generating predictable-as-possible VM behaviour You can Use Hawkshaw to mimic application obj

Martijn Verburg 40 Jan 9, 2021
A memory leak detection library for Android.

LeakCanary ?? A memory leak detection library for Android. square.github.io/leakcanary License Copyright 2015 Square, Inc. Licensed under the Apache

Square 28.1k Jan 3, 2023
One file java script for visualizing JDK flight recorder execution logs as flamegraphs without any dependencies except Java and a browser.

Flamegraph from JFR logs Simple one file Java script to generate flamegraphs from Java flight recordings without installing Perl and the Brendan Gregg

Billy Sjöberg 17 Oct 2, 2022
JVM Explorer is a Java desktop application for browsing loaded class files inside locally running Java Virtual Machines.

JVM Explorer JVM Explorer is a Java desktop application for browsing loaded class files inside locally running Java Virtual Machines. Features Browse

null 109 Nov 30, 2022
BTrace - a safe, dynamic tracing tool for the Java platform

btrace A safe, dynamic tracing tool for the Java platform Version 2.1.0 Quick Summary BTrace is a safe, dynamic tracing tool for the Java platform. BT

btrace.io 5.3k Jan 9, 2023
Fork of tagtraum industries' GCViewer. Tagtraum stopped development in 2008, I aim to improve support for Sun's / Oracle's java 1.6+ garbage collector logs (including G1 collector)

GCViewer 1.36 GCViewer is a little tool that visualizes verbose GC output generated by Sun / Oracle, IBM, HP and BEA Java Virtual Machines. It is free

null 4.1k Jan 4, 2023
Get Method Sampling from Java Flight Recorder Dump and convert to FlameGraph compatible format.

Note: Travis has removed the support for Oracle JDK 8. Therefore the build status is removed temporarily. Converting JFR Method Profiling Samples to F

M. Isuru Tharanga Chrishantha Perera 248 Dec 16, 2022
Tool for creating reports from Java Flight Recorder dumps

jfr-report-tool Tool for creating reports from Java Flight Recorder dumps. Influenced by https://github.com/chrishantha/jfr-flame-graph . Kudos to @ch

Lari Hotari 50 Oct 28, 2022
Log analyser / visualiser for Java HotSpot JIT compiler. Inspect inlining decisions, hot methods, bytecode, and assembly. View results in the JavaFX user interface.

JITWatch Log analyser and visualiser for the HotSpot JIT compiler. Video introduction to JITWatch video Slides from my LJC lightning talk on JITWatch

AdoptOpenJDK 2.8k Jan 3, 2023
A java agent to generate method mappings to use with the linux `perf` tool

perf-map-agent A java agent to generate /tmp/perf-<pid>.map files for just-in-time(JIT)-compiled methods for use with the Linux perf tools. Build Make

null 1.5k Jan 1, 2023
PerfJ is a wrapper of linux perf for java programs.

PerfJ PerfJ is a wrapper of linux perf for java programs. As Brendan Gregg's words In order to profile java programs, you need a profiler that can sam

Min Zhou 353 Jan 2, 2023
OOM diagnostics for Java.

Polarbear A tool to help diagnose OutOfMemoryError conditions. Polarbear helps track down the root cause of OutOfMemoryError exceptions in Java. When

Cue 20 May 14, 2019
Inline raw ASM instructions in Java

asm-inline At first I thought: Oh, I can make an optimization transformer for Proguard And then this happened. Example: public class Test { public

null 27 Dec 8, 2022
Some utility classes around java records

record-util Some utility classes around java records On the menu MapTrait Transform any record to a java.util.Map just by implementing the interface M

Rémi Forax 32 Apr 6, 2022