May 21st, 2013· New feature: performance charts.
The performance charts graphically present high level statistics for EE and SE applications, such as:
JSP/Servlet requests:
· count, per second
· request duration (average, max)
Database connections:
· how many opened and closed, per second
· live time (average, max)
Database queries:
· count, per second
· call duration (average, max)
Sockets:
· how many connections opened with accept() or connect() and how many closed, per second
· for how long connections stayed open (average, max)
· bytes read from sockets, per second
· bytes written to sockets, per second
File I/O (includes FileInputStream, FileOutputStream, RandomAccessFile):
· how many files opened and closed, per second
· for how long files stayed open (average, max)
· bytes read from files, per second
· bytes written to files, per second
Memory profiling: UI: object explorer: values are immediately shown for objects of the following classes:
primitive value wrappers:
· java.lang.Integer
· java.lang.Long
· java.lang.Short
· java.lang.Boolean
· java.lang.Byte
· java.lang.Character
· java.lang.Double
· java.lang.Float
· java.util.Date
· java.net.URL
· java.io.File
· java.util.zip.ZipFile
· java.util.jar.JarFile
atomics:
· java.util.concurrent.atomic.AtomicInteger
· java.util.concurrent.atomic.AtomicLong
· java.util.concurrent.atomic.AtomicBoolean
· Memory profiling: UI: object explorer: self referencing objects are explicitly indicated with [Self reference], and corresponding tree nodes are leafs now to avoid infinite expansion
· Memory profiling: UI: object explorer: added ability to customize the maximum number of shown individual objects with the help of the property -Dyjp.max.objects.to.show=number in /bin/yjp.ini. The default value remains 500. Note: setting bigger values increases memory usage and can slow down the UI.
· Memory profiling: bug fixed: some HPROF snapshots with huge arrays (> 2 GB shallow size each) were reported invalid and would not open
· Memory usage telemetry: the view layout has been improved to give the graphs more space
· Probes: UI: columns with event specific data, such as file name or SQL statement, are placed before other columns to avoid horizontal scrolling
· CPU profiling: added ability to disable the zero-time method correction with the help of the property -Dyjp.zero.time.methods=false in /bin/yjp.ini. The zero-time correction means that any calls to the following methods are ignored: java.lang.Object : wait(*)
· java.lang.Thread : sleep(*)
· java.lang.Thread : yield(*)
· java.net.PlainSocketImpl : socketAccept(*)
· java.net.PlainSocketImpl : accept(*)
· org.apache.tomcat.jni.Socket : accept(*)
· sun.nio.ch.ServerSocketChannelImpl : accept0(*)
· sun.misc.Unsafe : park(*)
· java.util.concurrent.locks.LockSupport : park*(*)
· com.ibm.tools.attach.javaSE.IPC : waitSemaphore(*)
· sun.nio.ch.EPollArrayWrapper : epollWait(*)
·
Technically, their time is subtracted from the caller time up to the call tree root when CPU profiling results are loaded in UI. In other words, their time is always assumed to be 0 when the correction is applied.
· Probes: problem solved: built-in probes might not work with some security manager settings
· Probes: performance of built-in probes has been slightly improved
· UI: Threads view: added ability to change the default thread show mode from "All Threads" to "Live Threads Only" by specifying -Dthreads.default.live_only=true in /bin/yjp.ini.
· UI: Threads view: added ability to choose "Show selected thread only" by default by specifying -Dthreads.default.selected_only=true in /bin/yjp.ini.
· UI: Threads view: added ability to change the default stack trace presentation mode from "Filtered stacks" to "Full stacks" by specifying -Dthreads.default.full_stacks=true in /bin/yjp.ini.
· UI: list of locally running applications: attached agents and agents loaded on start are explicitly indicated as "Agent attached" and "Agent loaded on start" respectively
· IDE integration: Eclipse: added missing "Profile As" popup menu items for Google plugin and Maven
· IDE integration: NetBeans: added support of Enterprise Application Client projects
December 13th, 2012· Memory profiling: "Ages" view: bug fixed: an internal error might happen
· Probes: bug fixed: assertion might fail at JavaObjectMap.cpp:108 due to a race condition
· Probes: bug fixed: an internal error might happen when clearing tables
· License management: bug fixes and minor improvements
November 17th, 2010· New Feature: Attach Mode:New feature: agent attach mode, i.e. an ability to profile Java applications started without the profiler agent.
· Previously, to profile a Java application it was required to start it with the profiler agent using IDE integration, J2EE integration or manually specifying appropriate JVM option -agentpath/-agentlib.
· Now it is possible to profile Java applications started without that option, attaching the profiler agent to a running JVM instance on demand.
· The agent can be attached to a locally running application from the Welcome screen...
· ...as well as to a remote application with the help of remote attach wizard
· This approach simplifies profiling, making it even more "on-demand profiling" than ever. It allows to avoid special step to enable profiling: any running Java application can be profiled.
· Unfortunately, the attach mode is not an ultimate solution: the existing JVMs provide only limited set of profiling capabilities for the attached agents. To get all profiling capabilities, you still have to start the profiled application with the profiler agent instead.
Memory Profiling:
· Improvement: behavior on memory snapshot loading has changed: weak, soft and finalizer queue references are not nulled by default. All live objects, even those accessible by only weak, soft or final queue references, are treated as live.
· Now you can choose objects of which reachability scope to analyse after opening the snapshot in UI (see below for detail).
· Why has the behavior been changed?
· Previous default behavior - to treat all non-strong references as nulls - was introduced in the very first version of YourKit Java Profiler, and its intention was to simplify memory leak detection and help you focus on the real, "strong referenced" problems.
· However, there were many users confused by "missing" objects, and "mismatch" in sizes shown in memory usage telemetry graph and memory snapshots views.
· Also, to analyse size of data structures such as soft/weak maps, it was required to explicitly instruct the profiler to keep weak/soft references, via properties -Dyjp.keep.weak.refs=true and/or -Dyjp.keep.soft.refs=true in yjp.ini. Changing the settings required to re-load the snapshot and rebuild its index file.
· We believe that the new behavior addresses all the issues: o all live objects are visible "out-of-the-box" when opening a memory snapshot o when detecting a memory leak, only strong-reference paths are shown by default o analysis of soft/weak map sizes and similar data structures is available "out-of-the-box"
New feature: Paths to GC roots view has an option (active by default) to ignore paths through weak, soft and finalizer queue references:
· New feature: objects view has new section Reachability scopes which distributes objects depending on how/whether they are reachable from GC roots: o Strong reachable: objects reachable from GC roots via at least one strong reference, or being GC roots themselves. Such objects will not be garbage collected until all strong references to them are nulled and/or they remain GC roots. Thus, memory leaks should be searched among them. o Weak/soft reachable: objects reachable from GC roots via weak and/or soft references only. Such objects can be deleted by garbage collector when it decides to free some memory. Such objects are not memory leaks, but they may deserve attention when you analyse memory consumption. o Dead objects: unreachable from GC roots, but not yet collected. Once garbage collector decides to delete them, they will be deleted. Objects of classes overriding Object.finalize() will be placed to the finalizer queue before actual deletion. o Objects pending finalization: objects in the finalizer queue.
In addition to the "Reachability scopes", objects view's header shows brief summary on the number of strong reachable objects, and if there are any, provides an easy way to open them in new tab in one click (useful when analysing memory leaks):
Action "Memory | Instances by Class... (Ctrl+N)" allows to choose reachability scope of objects to open:
The reachability scope for individual objects is shown in reference explorers and paths views:
Snapshot comparison allows to choose reachability scope of objects to be included to the comparison results:
· New feature: new metrics "Distance to nearest GC root" is shown in Quick info for individual objects
· New feature: new memory inspection Objects with biggest distance to nearest GC root helps finding longest chains of objects such as linked lists, queues, trees etc.
· New feature: new memory inspection HashMap hash code distribution helps finding maps with bad performance due to hash collisions
· New feature: new memory inspection Duplicate Arrays finds potential memory waste
· New feature: added ability to capture HPROF format snapshots of applications running on JRockit R28.0.0 and newer.
· New feature: HPROF snapshots: thread stacks at the moment of snapshot capture are shown in "Threads" tab (if available). Also, for each thread are shown its name, status and tid, as well as daemon threads are indicated. Note: if there are index files created via earlier builds of the profiler, please delete or re-create them; otherwise stacks will not be shown.
· Improvement: object size calculation is supported for HPROF snapshots of JVMs running in the compressed pointer mode (JVM option -XX:+UseCompressedOops).
· In this mode, JVM runs as a 64-bit process, but object references stored in heap are 32-bit instead of full 64-bit, which saves memory and helps CPU cache in its work.
· HPROF files do not explicitly contain object size information, so the profiler calculates them basing on object field types and array sizes. In case of a 64-bit snapshot, it has to know whether -XX:+UseCompressedOops was used, to detect object reference size - 4 bytes or 8 bytes. Unfortunately, this information cannot be automatically retrieved from the HPROF file.
· When a 64-bit HPROF snapshot is about to open, you will be asked to choose what kind of snapshot it is.
· When opening snapshots via API or when performing offline snapshot indexing, please use -Dyjp.hprof.compressed.oops=true or -Dyjp.hprof.compressed.oops=false (default).
· Improvement: more accurate size calculation for some arrays in HPROF snapshots
· Improvement: first elements of primitive arrays are immediately shown in object explorers
· Improvement: default number of array elements shown in object explorer (10) can be changed adding -Dyjp.array.elements.to.show=value in /bin/yjp.ini However, note that showing too many elements can make the UI slower when browsing big arrays.
· Improvement: if Class hierarchy is shown for a single object which is a class itself (java.lang.Class), the hierarchy is presented for corresponding class, but not for class java.lang.Class.
· New feature: action "Memory | Class Itself (java.lang.Class) by Name..." (Ctrl+Shift+C). The new action is similar to "Memory | Instances by Class...", but it opens the class object itself (java.lang.Class) for specified class instead of its instances. This new action can be used to explore class static fields, as well as class loader and super class hierarchy, especially for classes without instances.
· Improvement: Garbage collection view: in addition to the collected object count and size columns, count and size of existing object columns are shown. Also, context actions such as "Memory | View Selected Objects... (F4)" are available, so you not only can get the numbers, but also browse the existing objects themselves. Note: statistics is shown for all objects in the snapshot; if you need allocation statistics for particular subset of objects, open corresponding objects view and use its "Allocations" section.
· Improvement: objects view: UI cleanup: allocation views are not cluttered with GCed object statistics anymore, as they are aimed to analyse where particular existing objects were created. To analyse where excessive garbage was produced, use dedicated view Garbage collection instead.
· Improvement: objects view: slave view "Callees List" shown for allocations has new columns "Own Count" and "Own Size".
· Improvement: objects view: slave views "Callees List", "Merged Callees" and "Back Traces" shown for allocations display information about objects which correspond to current selection in master view, but not objects of entire snapshot.
· Improvement: Quick info shows retained object count as well as retained size
· Improvement: Quick info shows text presentation for char[] and java.lang.String in scrollable text area. In particular, this allows to inspect long strings.
· Improvement: Quick info allows to export entire string or primitive array to a file in following formats: o text file in UTF-8 (available for char[] and java.lang.String) o binary file (available for byte[]) o text file with array element values (available for all primitive arrays)
· Improvement: Quick info text presentation is shown initially positioned at beginning of the text. Also, long lines are wrapped.
· Bug fixed: "Self referencing objects" inspection could give false alarm for some java.lang.Thread instances
CPU Profiling:
· Improvement: UI cleanup: slave views "Merged Callees" and "Back Traces" are shown for master views "Hot spots" and "Method lists" only, but not for "Call Tree" views, where they were useless. Should you need to quickly get information about all calls of the method selected in call tree, use actions "CPU | (View) Method Merged Callees in New Tab (Ctrl+M)", "CPU | (View) Method Back Traces in New Tab (Ctrl+Shift+M)" and "CPU | (View) Method by Name... (Ctrl+Shift+N)".
Telemetry:
· New feature: Threads view optionally shows all threads, only live threads or only finished threads.
· Improvement: Threads view: calls from java.util.concurrent which block caller thread are now shown as "BLOCKED" instead of "WAITING" as JVM reports
· Improvement: Threads view: Copy to clipboard action allows to copy strings containing character with code 0 (C-style string terminator). Previously, such strings were truncated.
· Bug fixed: Threads view: scroller position might get lost on resize
· Bug fixed: Threads view: "Stack Traces" tab might not update properly with "Show stack of selected thread only" selected
Probes:
· New feature: new built-in probe com.yourkit.probes.builtin.Processes monitors processes launched via Runtime.exec() and ProcessBuilder.start().
· Improvement: mapping between monitored objects and corresponding event row indices no longer involves creation of temporary Integer objects. This reduces garbage collector load, as well as eliminates possible problem with internal map memory usage.
· Note on probes API: class com.yourkit.probes.ObjectIntWeakMap which implemented the old mapping approach has been deprecated. Instead, use com.yourkit.probes.ObjectRowIndexMap.
· Improvement: improved performance of built-in probe com.yourkit.probes.builtin.Databases
· Improvement: new startup option noprobe= allows not to register particular built-in probe on startup
· Improvement: startup options 'probeclasspath' and 'probebootclasspath' allow specification of several elements, separated with system-specific path separator (';' on Windows, ':' on non Windows)
· Improvement: it is now possible to use callback method parameter annotation @This declared as a reference type other than java.lang.Object in probes applied to constructors. However, note that the probe must not have onEnter callback; only onReturn, onUncaughtException or onUncaughtExceptionExt are allowed. If you need to apply onEnter to a constructor, declare parameter @This as java.lang.Object in all the probe callbacks.
IDE Integration:
· New feature: Eclipse: Maven run configuration type supported
· New feature: NetBeans: Maven projects supported
· New feature: IntelliJ IDEA X (EAP) supported
· Improvement: Eclipse: new simplified plugin UI
· Improvement: Eclipse: the profiler plugin update site archive is bundled as /lib/eclipse-plugin/yourkit95_for_eclipse.zip. Use it instead of the online site http://www.yourkit.com/download/yourkit95_for_eclipse/ if installing the plugin with limited internet access.
· Caveat: Eclipse: integration is supported for Eclipse 3.4 and newer only. Eclipse 3.3 is no longer supported.
User Interface:
· Improvement: to save vertical space for other components, the help bar height was reduced. Also, there is an option to hide the help bar ("Settings | Show Help Bar") and/or the status bar ("Settings | Show Status Bar")
· Improvement: "Thread name" filter in "Threads" tab (and similar filters in other views) now optionally accepts full regular expression syntax
· Improvement: before starting opening a memory snapshot, the profiler checks whether available disk space is enough to create temporary files needed to open the snapshot. If the available space is not enough, a warning is shown, as well as instructions on how to specify alternate temporary directory (e.g. on another disk).
· Bug fixed: Mac OS X: hyperlinks in selected rows had text color almost indistinctive from the background
Miscellaneous:
· Improvement: Automatic deadlock detector is now able to find cycles of threads that are in deadlock waiting to acquire not only object monitors, but also ownable synchronizers (java.util.concurrent.locks.*)
· Improvement: Command line tool to control profiling: added commands clear-cpu-data, clear-alloc-data, clear-monitor-data
· Improvement: Solaris: profiler UI startup script yjp.sh automatically uses JDK 6 in Solaris standard location; this means that on most machines it will run out of the box
· Improvement: Help is not only available online, but also as a ZIP archive for offline browsing (see Docs & Demos)
January 19th, 2010· IDE integration: NetBeans 6.8 (release) supported
· J2EE integration: GlassFish 3 supported
· Memory profiling: improved diagnostics on attempt to open incomplete snapshot
November 23rd, 2009· IDE integration: NetBeans 6.8 supported
· Memory profiling: extended range of partially-incorrect HPROF snapshots produced by old JVMs which can be successfully opened
· Mac OS X: problem solved: on low memory snapshots could be captured in inappropriate situations
· UI: Threads view: improvement: thread state colors are now configurable. Use legend's popup menu to configure the color.
· JRockit: improved handling of incorrect data provided by JRockit JVM under some rare circumstances, which could lead to crashes on memory snapshot capture and/or to invalid memory snapshots
May 18th, 2009· Memory profiling: extended range of partially-incorrect HPROF snapshots (e.g. produced by pre-Java 6 VMs) which can be successfully opened and analyzed.
· Bug fixes in snapshot comparison.
· Bug fixed: "Show stack of selected thread only" option did not work under certain circumstances.
· Minor bug fixes.
May 18th, 2009· New feature: "Threads" view: option to show stack of selected thread only.
· IDE integration: NetBeans 6.5 integration improvements.
· Solved desktop integration issues on KDE.
· Minor bug fixes.
May 18th, 2009· IDE integration: MyEclipse "Server" and "Server Application" run configurations supported.
· Problem fixed: possible VerifyError using xalan.
May 18th, 2009· Bug fixed: memory snapshots with recorded object allocations might fail loading.
May 18th, 2009· Bug fixed: problems using inclusive filters.
· HPROF snapshots: thread and stack is shown for GC roots of types "Stack Local" and "JNI Local". This information will be available in HPROF snapshots captured with Java 6 update 14, according to http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6306922. Tested with EA build of update 14.
· Exception telemetry: bug fixed: snapshots with many recorded exceptions might load slowly.
· NetBeans 6.5 integration: improvements.
· J2EE integration: Resin server integration improved.
March 3rd, 2009· NetBeans 6.5 integration: improved support of JBoss
· New G1 garbage collector available in Java 6 update 14 (Early Access) is now supported
· Bug fixed: console version of the J2EE integration wizard did not run on Java 5 but only on Java 6
· Installation improvements on Windows Vista
· IDE integration: solved issues with navigation feature
February 17th, 2009Memory profiling:
· Snapshot index file accelerates snapshot opening, which makes the subsequent snapshot loadings much faster, as well as allows opening big snapshots on 32-bit workstations by using index file pre-created on powerful 64-bit machine.
· Class loaders view shows objects grouped by class loader; this view can help solving issues such as leaked loaders.
· In Class list, retained size estimation for each class is shown immediately on opening the view.
· Allocation telemetry: ability to profile object allocation without capturing a memory snapshot.
· Non-serializable objects referenced from serializable objects inspection.
· Option to transfer memory snapshot of remote application via compressed data stream.
· Special handling of byte[] and char[] in UI.
CPU profiling:
· Callees list.
· "Own time" column in call tree.
· "Average time" column in call tree.
Telemetry:
· Exception telemetry.
· Thread state telemetry.
· Telemetry graphs are now scalable.
· Ability to change the telemetry buffer capacity.
J2EE:
· "Generic server" option helps integrating with servers not explicitly supported by J2EE server integration wizard.
· J2EE server integration resolves many problematic cases of e.g. edited/modified scripts which prevented successful integration in previous versions.
IDE intregration:
· NetBeans 6.5 supported.
· JDeveloper 11g supported.
User interface:
· Table column visibility is now configurable.
· Overall usability improvements.
Licensing:
· The profiler agent and controller are are freely redistributable under BSD license.
Miscellaneous:
· FreeBSD supported.
· Command line tool to control profiling without using the profiler UI; in some cases it can be used instead of the profiler API.
· Automatic deobfuscation: yGuard and ProGuard supported; RetroGuard support improved.
· Overall stability and performance improvements.
February 10th, 2009· CPU profiling: own time column in call tree.
· CPU profiling: average time column in call tree (available in CPU tracing snapshots).
February 4th, 2009· Optimization: faster snapshot loading
· Minor fixes and UI improvements
January 26th, 2009· Memory profiling: ability to save snapshot index file to accelerate further snapshot opening.
· Optimization: 32-bit version of the profiler opens memory snapshots faster.
· Bug fixes.
January 16th, 2009· Optimizations and minor bug fixes
January 8th, 2009· Table column visibility is now configurable.
January 8th, 2009· J2EE integration: bug fixed: agent startup options (see changes in 7.5.9) were incorrectly passed in case of WebSphere and Sun Application Server.
· J2EE integration: Mac OS X: space characters removed from the default installation directory name to prevent J2EE integration wizard issues related with incorrect handling of paths with spaces in some server startup scripts.
· Minor UI bug fixes.
December 23rd, 2008· Multiple improvements in thread telemetry UI
"Class loaders" view improvements:
· for each loader, the number of loaded classes is shown, as well as the number of classes without instance among them; this information can help finding leaked loaders
· paths from GC roots to the loader object are now explicitly available as a slave view; this allows to learn why particular loader is retained in memory
· "File | Compare Snapshot with..." now compares exception telemetry as well
December 16th, 2008· Telemetry graphs are now scalable. Choose desired time resolution with the help of a toolbar button (the rightmost) or invoke a popup menu on the graph.
· "Callees list" view. Read more...
· J2EE integration wizard: "Generic server" option helps integrating with servers not explicitly supported by the wizard
December 4th, 2008· Non-serializable objects inspection (see changes in 4026): bug fixed: improper handling of serializables which use standard collection classes: ArrayList, LinkedList, HashSet, HashMap, Vector, Hashtable. For instance, this fix enables proper analysis of Tomcat's HTTPSessions.
· Minor fixes.
November 11th, 2008· Memory profiling: new view "Class loaders" shows objects grouped by class loader
· Thread status telemetry: graph is automatically scrolled when mouse is gragged to left/right side
· Minor UI fixes
November 6th, 2008· CPU profiling: bug fixed: incorrect wall times under certain circumstances
October 22nd, 2008· Memory profiling: HPROF snapshots: available properties (such as Java version, class path etc.) are shown in the Summary tab
· Summary tab: improved visualization of paths and parameters by showing components split by lines
· Memory profiling: bug fixed: text values of java.lang.String might be incorrectly shown
· Welcome panel: tooltip in recent snapshot list shows snapshot full file path, size and modification date
October 22nd, 2008· Memory profiling: bug fixed: text values of java.lang.String might be incorrectly shown
· Minor UI bug fixes
· Windows installer is bundled with Java 6 update 10 JRE. Among a number of improvements, this Java update solves annoying problem of open file dialog which was very slow entering a directory containing ZIP files.
October 11th, 2008· Bug fixes.
October 1st, 2008· Memory profiling: problem fixed: possible crash rendering huge strings
· Memory profiling: optimization: views with huge strings are rendered faster
· Solved problems with Eclipse 3.4 integration
· Windows 64-bit: to achieve better performance and user experience, the profiler UI will automatically launch on a 64-bit JRE
July 30th, 2008· IBM Java 6 supported
· Minor UI bug fixes