April 30th, 2013
· The agent log file could not be created if the session name contained invalid file name characters.
April 13th, 2013
· This version fixes sampled allocation recording, which might crash the profiled application if CPU sampling had never been started.
· The bundled JRE has been upgraded to Java 7.
February 21st, 2013
· Support for FreeBSD 8 has improved.
· Loading of snapshots with a large amount of GC is greatly optimized.
· This release solves some issues with JBoss, GlassFish, and OSGI Felix.
December 14th, 2012New Platforms Supported:
· Linux on ARM: running profiled applications and/or the profiler UI is supported on soft-float (ARMv5, ARMv7) and hard-float (ARMv7) JVMs
· Linux on PPC: running profiled applications and/or the profiler UI is supported on 32-bit (ppc) and 64-bit (ppc64) JVMs
CPU tracing overhead has been significantly reduced (different profiled applications run up to 10%-50% faster than with the previous profiler version) and accuracy has been increased due to the following improvements:
· new adaptive tracing mode automatically reduces tracing overhead and makes the results more adequate (see CPU tracing settings)
· CPU tracing now measures wall time by default (see CPU tracing settings and time measurement).
· This reduces profiling overhead because obtaining wall time is faster than obtaining CPU time.
· Wall time is also more precise than CPU time, providing a few nanosecond accuracy when measuring time intervals.
· internal improvements reduced profiling overhead
· All CPU profiling settings applied in runtime are configured in CPU sampling settings and CPU tracing settings
Please note the related changes:
· API: two new Controller methods have been added: startCPUTracing(@Nullable String settings) and startCPUSampling(@Nullable String settings). Methods startCPUProfiling(...) have been deprecated.
· J2EE high-level profiling is now configured in CPU sampling settings and CPU tracing settings
· startup option noj2ee has been removed in favor of the high_level_cpu_profiling property in CPU sampling settings and CPU tracing settings
· startup options samplingperiod and samplingdelta have been removed in favor of the sampling_period_ms and sampling_period_delta_ms properties in CPU sampling settings
· time measurement is now configured in CPU sampling settings and CPU tracing settings. A separate configuration file .walltime and a dedicated startup option walltimespec are not used anymore.
· startup option filters has been removed in favor of CPU tracing settings
· CPU tracing: wall time methods are no longer implicitly treated as always non-filtered. The previous behavior might create unexpected overhead if wall time measurement was configured for many or all methods.
· Agent: time measurement has been improved to ensure monotonicity when appropriate
· CPU sampling: bug fixed: native method wrappers $$YJP$$ might appear in the stacks
· UI: new feature: Class tree view is similar to "Class list", but shows classes grouped by package
· UI: new feature: memory views such as Class list allow selection of multiple rows. This affects slave views content, as well as actions such as "View Selected Objects" and others.
· "Duplicate strings" inspection: the results are shown under a new grouping root node which presents the total waste in all the duplicate strings
· Optimization: snapshots with big primitive arrays are opened faster
· UI: optimization: performance of "Incoming References" view has been dramatically improved
· UI: improved calculation of exact retained size in "Class list" and similar views: more items are processed per click if calculation speed allows
UI: improvement: available CPU cores are used for parallel computations in the following views:
· Class list
· Class tree
· Reachability scopes
· Class loaders
· Web applications
· Object ages
· UI: improvement: "Calculate exact retained sizes" action uses available CPU cores to perform calculation in parallel
· UI: improvement: "Calculate exact retained sizes" action does not force sorting by the retained size column if calculation is continued
· Optimization: allocation recording overhead has been reduced for multithreaded applications. How big the improvement is depends on "Record each N-th object" setting. According to tests, code being profiled runs up to 30% faster when each 10th object is recorded (the default setting), and up to 70% faster when each 100th object is recorded, comparing with the previous version
· Web applications: improvement: web application context path (URL) is now shown in addition to web application name
· Web applications: added support of Jetty (versions 6, 7, 8)
· Class instance count telemetry ("Class List" tab), unlike other telemetry views, does not automatically periodically update. This is for performance considerations: gathering the statistics may take significant time in case of huge heaps with many objects, thus should run on demand.
Instead, it updates when:
· the "Refresh" button is pressed when the tab is visible (an explicit update)
· the "Force Garbage Collector" button is pressed when the tab is visible (it makes sense to immediately see the changes in object counts and sizes after forcing garbage collection)
· a snapshot is captured (gathering the statistics is a part of the capture)
· UI: Paths: bug fixed: duplicate path entries could be shown under certain circumstances
· CPU usage telemetry: kernel CPU time is shown as a separate curve, in addition to the main user + kernel CPU time graph.
· AIX note: we know two functions to measure process CPU time on AIX: clock_gettime(CLOCK_PROCESS_CPUTIME_ID) and rusage(). The first one is used by default because it seems to produce better results than its counterpart. However, it has a drawback: it does not give kernel and user times separately. This means you won't see the kernel time telemetry. To enable it, specify agent startup option _with_rusage to use rusage() instead.
· Graph rendering has been optimized, making UI much more responsive, especially when using bigger scales
· Thread state telemetry: bug fixed: telemetry samples might happen at lower rate resulting in gaps in the thread state telemetry graph
· New feature: ability to clear tables. Get rid of older events you are not interested in anymore, or give space for new events if the table capacity limit has been reached.
· To clear table from the UI, use "Clear table(s)..." link located in the right upper corner of the "Probes" tab.
· To clear tables programmatically, use the profiler API method Controller.clearUserTables(String... tableNames)
· UI: "Probes" tab layout has been changed to gives more vertical space for browsing event lists, and make the UI more consistent. Now tables, timeline, event call tree and CPU usage estimation tabs are located on the same level.
· Class loading probe can be enabled with startup option probe=classloading (the default) and disabled with startup option noprobe=classloading. Startup option builtinprobes=none now implies noprobe=classloading.
· Probes: API: deprecated class com.yourkit.probes.ObjectIntWeakMap has been removed. Use com.yourkit.probes.ObjectRowIndexMap instead.
· "Thread Life Cycle" built-in probe: bug fixed: name change events were incorrectly associated for a few JVM internal threads
· the default triggers description file has been changed to /.yjp/triggers.txt
· Eclipse, IntelliJ IDEA, NetBeans 7.0 and newer plugin automatically detects 32-bit and 64-bit JVMs.
· The "Profile" action must know whether the JVM for launching the profiled application is 32-bit or 64-bit, in order to supply appropriate agent version.
· Previously, the plugin fully relied on the user choice in the "32-bit or 64-bit JRE Selection" tab of the plugin configuration. A wrong choice resulted in the JVM failure Error occurred during initialization of VM. Could not find agent library.
· Now, an attempt is made to automatically detect the JVM kind by obtaining available information from the IDE. If the detection succeeds, its result overrides the user-made choice.
· This makes the "Profile" action work out of the box in most cases.
· Note: we retained the "32-bit or 64-bit JRE Selection" tab as a backup for the cases when the automatic detection is impossible.
· Eclipse: Maven run configurations supported in Eclipse 3.7 and newer
· IntelliJ IDEA 12 supported
· NetBeans 7.3 supported
· NetBeans: bug fixed: profiling single class or JUnit test might not work in Web projects
· J2EE integration wizard: added Jetty 6 and newer support
· User Interface
· Improvement: the left vertical tab group which represents opened snapshots and connected applications now tries to avoid the scroller if many tabs are opened, by shortening the tab titles. If the full tab title does not fit, it still will be accessible via a tool tip.
Filters: added a quick way to switch between applying and not applying filters in UI:
· with a new main menu item Settings | Collapse Filtered Calls
· the toolbar when the profiler is connected to a running application
· "Filters..." hyperlink in the Legend when working with a snapshot
· Scalability: to make UI more responsive when working with huge snapshots, "Callees list" slave view is not automatically calculated as soon as the selection in the master table changes. Instead, calculation should be explicitly started by clicking a link. By default, automatic calculation is performed for snapshots with less than 1,000,000 call frames (i.e. unique stacks), which covers the greatest majority of the real world snapshots. To change the threshold, specify -Dyjp.callees.auto.threshold=number of frames in /bin/yjp.ini.
· Added support of high-contrast color schemes. To use it, please specify -Dyjp.system.colors=true in /bin/yjp.ini.
· yjp.sh startup script improved: if YJP_JAVA_HOME environment variable is specified it has priory over bundled JRE and system default Java, which provides an opportunity to run the profiler UI under particular Java version without editing the startup script
· Summary: added "Command line" property to represent the full command line of the Java process
· Call tree and back traces views: added popup menu item to expand selected node down to 5 levels, as a supplement to the existing item which expands the node fully
· Improvement: dialog style unified in respect of Help and non-closing button location
· Bug fixed: the profiler window might become invisible after profiler restart if one of previously used displays was no longer available
· Bug fixed: stack overflow exception under certain rare circumstances
· Bug fixed: file chooser invoked from Open Snapshot dialog improperly handled Enter key, when running UI on Java 7
· Export with command line: class list is exported for performance snapshots too (as seen in Memory tab | Class list)
· Caveat: snapshot directory configuration file is now /.yjp/snapshotdir.txt
· Windows installer: the profiler is now bundled with Java 7 JRE. Note: Java 6 remains a fully supported platform.
· Agent: log file name is now -.log to better separate logs from different applications
· Agent: added an option to store logs from several runs of the same application in a series of log files named ..log instead of creating an individual log file -.log for each profiled process.
· This mode can be useful when profiling applications such as servers, when having a united log is better than having a separate log for each server start.
· To use this mode, specify startup option united_log
· Session name is the name of the application as seen in the profiler UI, and which is also used by default to name the application's snapshots. It is automatically chosen for particular application basing on its jar file name, or its main class name, or the custom executable name, or on the run configuration name when profiling from within IDE. The session name can also be explicitly specified with the startup option sessionname=
· Running number starts with 1. If the first log file .1.log exceeds the size limit, a new log file .2.log will be created and used, then .3.log etc. The size limit is 1 MB by default, and can be changed with the startup option log_file_size_limit=
· Note: the oldest log files are not automatically removed. If you need to clean them up, do it manually or write a script.
· Agent: Groovy 2.0 supported
· Agent: CPU tracing and allocation recoding overhead slightly reduced on IBM Java
· Agent: bug fixed: attach mode: incorrect exception handler in constructor under certain circumstances
· Agent: bug fixed: possible java.lang.VerifyError: Inconsistent stackmap frames at branch target for particular code patterns compiled with Eclipse compiler
· UI: remote profiling: bug fixed: remote profiled applications running on different machines, configured to use the same port and started at the same time could not be simultaneously connected in the profiler UI
September 27th, 2011
· This new major release contains a lot of new features, improvements, and bugfixes. Support of AIX (ppc and ppc64) platform was added.
· A new "triggers" feature allows users to automatically perform different actions on particular events (high CPU or memory usage, execution of method, etc.).
· Allocation recording can gather the garbage collector statistics per class.
· Performance snapshots can be extracted from memory snapshots.
· Calibration accuracy of CPU tracing was improved.
· CPU usage and time spent in garbage collector are now shown on the same graph.
· As usual, many improvements to the UI were implemented.
November 16th, 2010
· Improvement: more OSGi container applications can be profiled without the need to manually twick OSGi settings to allow loading of the profiler classes. In particular, this includes GlassFish 3.1.
· IDE integration: improved NetBeans plugin installation on Windows Vista and Windows 7. Previously, the IDE integration wizard might fail if NetBeans was installed in a protected directory such as "Program Files" due to Windows's User Access Control (UAC). Now, appropriate UAC prompt is shown when necessary, letting the wizard succeed.
· IDE integration: NetBeans 7.0 M2 supported
· IDE integration: profiler plugin UI: improvements
· UI: Welcome screen: improved usability on low resolution screens
· UI: open snapshot dialog: grouping snapshots by session is now optional
· Bug fixed: UI: open snapshot dialog might improperly refresh under certain rare circumstances
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
· 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
February 26th, 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
· Callees list
· "Own time" column in call tree
· "Average time" column in call tree
· Exception telemetry
· Thread state telemetry
· Telemetry graphs are now scalable
· Ability to change the telemetry buffer capacity
· "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
· NetBeans 6.5 supported
· JDeveloper 11g supported
· Table column visibility is now configurable
· Overall usability improvements
· The profiler agent and controller are are freely redistributable under BSD license
· 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
November 5th, 2008
· A problem with incorrect wall-times was fixed.
· The J2EE integration wizard provides the ability to specify server startup options.
October 20th, 2008
· Text values of java.lang.String might be incorrectly shown.
· The Windows installer is bundled with Java 6 update 10 JRE.
· Among with a number of improvements, this Java update solves an annoying problem of the open file dialog which was very slow entering a directory containing ZIP files.
September 30th, 2008
· A possible crash when huge strings are being rendered is fixed.
· A problem with Eclipse 3.4 integration is fixed.
· The 64-bit JVM is automatically used on Windows 64-bit platforms.