-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed_json_created.json
executable file
·1 lines (1 loc) · 28.9 KB
/
feed_json_created.json
1
{"version": "https://jsonfeed.org/version/1", "title": "binjr", "home_page_url": "https://binjr.eu/", "feed_url": "https://binjr.eu/feed_json_created.json", "description": "binjr, a time series browser", "icon": "https://binjr.eu/assets/images/binjr_avatar.png", "authors": [], "language": "en", "items": [{"id": "https://binjr.eu/blog/2024/11/binjr-v3201httpsgithubcombinjrbinjrreleasestagv3201-is-now-available-/", "url": "https://binjr.eu/blog/2024/11/binjr-v3201httpsgithubcombinjrbinjrreleasestagv3201-is-now-available-/", "title": "binjr v3.20.1 is now available! \ud83c\udf89", "content_html": "<h1 id=\"binjr-v3201-is-now-available\"><a href=\"https://github.com/binjr/binjr/releases/tag/v3.20.1\">binjr v3.20.1</a> is now available! \ud83c\udf89<a class=\"headerlink\" href=\"#binjr-v3201-is-now-available\" title=\"Permanent link\">¶</a></h1>\n<p>Released on Sun, 10 Nov 2024</p>\n<blockquote>\n<p>This is an interim release which fixes a regression introduced in v3.20.0 that severely impacts the peformances of the CSV and Log files adapters.</p>\n</blockquote>\n<!-- more -->\n\n<h3 id=\"whats-new\">What’s new?<a class=\"headerlink\" href=\"#whats-new\" title=\"Permanent link\">¶</a></h3>\n<ul>\n<li><em>[Dependencies]</em> Rolled back embedded OpenJDK runtime to 21.0.5</li>\n<li><em>[Fixed]</em> Bad performances when using the CSV and Logs adapters caused by a regression in OpenJDK 23.0.1 when using Shenandoah GC.</li>\n<li><em>[Fixed]</em> An error is raised in the installer when clicking on the ‘back’ button on the install verification dialog.</li>\n</ul>\n<h3 id=\"links\">Links<a class=\"headerlink\" href=\"#links\" title=\"Permanent link\">¶</a></h3>\n<ul>\n<li><a href=\"https://binjr.eu/download/latest_release/\">Download</a></li>\n<li><a href=\"https://binjr.eu/documentation/getting-started/\">Getting starting</a></li>\n<li><a href=\"https://github.com/binjr/binjr/issues\">Report an issue</a></li>\n</ul>", "image": "https://binjr.eu/assets/images/binjr_card.png", "date_published": "2024-11-10T00:00:00+00:00", "authors": [{"name": "binjr"}], "tags": null}, {"id": "https://binjr.eu/blog/2024/10/new-ui-feature-splittable-visualization-area/", "url": "https://binjr.eu/blog/2024/10/new-ui-feature-splittable-visualization-area/", "title": "New UI feature: Splittable visualization area", "content_html": "<h1 id=\"new-ui-feature-splittable-visualization-area\">New UI feature: Splittable visualization area<a class=\"headerlink\" href=\"#new-ui-feature-splittable-visualization-area\" title=\"Permanent link\">¶</a></h1>\n<style>\n video {\n width: 100%;\n height: auto;\n box-shadow: 0 0 .2rem rgba(0, 0, 0, .1), 0 .2rem .4rem rgba(0, 0, 0, .2);\n }\n</style>\n\n<p>Binjr has had the ability to detach a tab into a new window to allow the user to view more than one worksheet at a time for a while now, and this has proven to be a really useful feature, especially on multi-monitor setups.</p>\n<p>But admittedly, it can be a tad fussy to set up when you want to view several worksheets neatly arranged in a grid on a single screen (unless your window manager is able to handle that for you, that is).</p>\n<!-- more -->\n<p>So I’m hoping people will find this useful; the ability to split the visualization pane, horizontally or vertically, within the main window.</p>\n<p>Of course, the ability to detach a tab into a new window isn’t going anywhere, and such windows can now also be split in the same fashion.</p>\n<p>Below is an example of what it looks like: </p>\n<p><img alt=\"Splittable pane\" src=\"https://binjr.eu/assets/images/splittable-pane-overview.png\" /></p>\n<p>If you’re feeling adventurous, you can even give it a try in the <a href=\"https://github.com/binjr/binjr/releases/tag/v3.21.0-SNAPSHOT\">v3.21.0 Preview build</a>, but please be warned that it is still early days and that it is quite buggy at the moment, and not everything is implemented yet.</p>\n<p>To split a view, click on the icon to the right of the tabs to create a new pane to the right, or ALT+click to create a new pane at the bottom.</p>\n<p><img alt=\"split_tab_button\" src=\"https://binjr.eu/assets/images/split_tab_button.png\" /></p>\n<p>You can drag series from the source panel to create a new worksheet, or drag an existing tab from onto it. When a split pane is empty, you can discard it by process the top let cross icon.</p>\n<video controls muted src=\"https://binjr.eu/assets/videos/splittable_pane_demo.mp4\" type=\"video/mp4\"/>\n</video>\n<p>Alternatively, you can send an exiting tag into a new split pane directly using the right-click context menu:</p>\n<p><img alt=\"Splittable pane menu\" src=\"https://binjr.eu/assets/images/splittable_pane_menu.png\" /></p>\n<p>To be honest, it’s been a while since the last time a brand new UI feature was introduced in binjr, so I’m pretty exited about this one, and I hope you’ll like it too. </p>\n<p>In any case, please let me know what you think!</p>", "image": "https://binjr.eu/assets/images/splittable-pane-overview.png", "date_published": "2024-10-27T00:00:00+00:00", "authors": [{"name": "fthevenet"}], "tags": null}, {"id": "https://binjr.eu/blog/2024/10/binjr-v3200httpsgithubcombinjrbinjrreleasestagv3200-is-now-available-/", "url": "https://binjr.eu/blog/2024/10/binjr-v3200httpsgithubcombinjrbinjrreleasestagv3200-is-now-available-/", "title": "binjr v3.20.0 is now available! \ud83c\udf89", "content_html": "<h1 id=\"binjr-v3200-is-now-available\"><a href=\"https://github.com/binjr/binjr/releases/tag/v3.20.0\">binjr v3.20.0</a> is now available! \ud83c\udf89<a class=\"headerlink\" href=\"#binjr-v3200-is-now-available\" title=\"Permanent link\">¶</a></h1>\n<p>Released on Wed, 23 Oct 2024</p>\n<!-- more -->\n\n<h3 id=\"whats-new\">What’s new?<a class=\"headerlink\" href=\"#whats-new\" title=\"Permanent link\">¶</a></h3>\n<ul>\n<li><em>[New] [UI]</em> The number of ticks between two graduations the Y axis now automatically adapts to best fit based on the available space and unit types.</li>\n<li><em>[New] [UI]</em> Added a keyboard shortcut (F9) to reset the time range of a worksheet to its default value.</li>\n<li><em>[New] [CSV Adapter]</em> Doing a hard refresh (Ctrl+F5) on a worksheet now forces all data read form CSV sources to be reloaded from the underlying files.</li>\n<li><em>[New] [CSV Adapter]</em> Added an option to ignore lines with unparsable time stamps.</li>\n<li><em>[New] [CSV Adapter]</em> Better error message when failing to parse a time stamp (provides column and line numbers).</li>\n<li><em>[New] [Dependencies]</em> Updated embedded OpenJDK and JavaFX runtimes to 23.0.1</li>\n<li><em>[New] [Dependencies]</em> Updated to Lucene 10.</li>\n<li><em>[Fixed]</em> “Unable to find valid certification path to requested target” error when trying to establish an HTTPS connection on macOS.</li>\n<li><em>[Fixed]</em> When dropping more than one node from the source tree view onto the legend pane of a worksheet, only the last node is added to the current chart.</li>\n<li><em>[Fixed]</em> User preference for “Treat undefined Y values as 0” is ignored.</li>\n<li><em>[Fixed]</em> The title bar for the binjr window is larger (or smaller) than it should be when using multiple monitors on Windows.</li>\n<li><em>[Fixed]</em> Closing and reopening the application causes the main window to slightly grow (or shrink) each time when using multiple monitors on Windows.</li>\n</ul>\n<h3 id=\"links\">Links<a class=\"headerlink\" href=\"#links\" title=\"Permanent link\">¶</a></h3>\n<ul>\n<li><a href=\"https://binjr.eu/download/latest_release/\">Download</a></li>\n<li><a href=\"https://binjr.eu/documentation/getting-started/\">Getting starting</a></li>\n<li><a href=\"https://github.com/binjr/binjr/issues\">Report an issue</a></li>\n</ul>", "image": "https://binjr.eu/assets/images/binjr_card.png", "date_published": "2024-10-23T00:00:00+00:00", "authors": [{"name": "binjr"}], "tags": null}, {"id": "https://binjr.eu/blog/2024/02/new-graphics-settings-are-coming-to-binjr/", "url": "https://binjr.eu/blog/2024/02/new-graphics-settings-are-coming-to-binjr/", "title": "New graphics settings are coming to binjr", "content_html": "<h1 id=\"new-graphics-settings-are-coming-to-binjr\">New graphics settings are coming to binjr<a class=\"headerlink\" href=\"#new-graphics-settings-are-coming-to-binjr\" title=\"Permanent link\">¶</a></h1>\n<p>I’m considering adding a new sub-category to binjr’s <code>Settings</code> panel, which, for the time being, goes by the woefully unimaginative name of “Graphics”. </p>\n<p>Not that I am planning to turn binjr into a video game engine or anything, but because I’ve recently felt the need to surface some existing JavaFX properties pertaining to how its rendering stack operates directly into the application. Up until now those were only settable via undocumented command line arguments, and having a more accessible way to control them seemed like a good idea.</p>\n<!-- more -->\n\n<p><img alt=\"graphics_settings_panel\" src=\"https://binjr.eu/assets/images/graphics_settings_panel.png\" /></p>\n<h2 id=\"hardware-acceleration-support\">Hardware acceleration support<a class=\"headerlink\" href=\"#hardware-acceleration-support\" title=\"Permanent link\">¶</a></h2>\n<p>binjr, courtesy of JavaFX, has always been capable of using hardware accelerated rendering on all supported platforms; via OpenGL on Linux and macOS (JavaFX Metal support is currently under development) and Direct3D on Windows. The framework automatically chooses the most appropriate rendering pipeline, falling back to a software-only implementation in the event that a suitable HW back-end could not be found. </p>\n<p>It generally does a good job at that on pretty much all OS, but there are some cases were it can be useful to override its decision, in one way or the other: for instance you might want to try and force using the HW back-end even when the heuristics weighted against that, like when running inside a virtual machine or on some more exotic hardware.</p>\n<p>Conversely, you might want to forcibly <strong>disable</strong> HW acceleration, if you experience rendering glitches or if the application is unstable.</p>\n<p><img alt=\"alt text\" src=\"https://binjr.eu/assets/images/graphics_settings_HW_support.png\" /></p>\n<h2 id=\"overriding-the-user-interface-scaling-factor\">Overriding the User Interface scaling factor<a class=\"headerlink\" href=\"#overriding-the-user-interface-scaling-factor\" title=\"Permanent link\">¶</a></h2>\n<p>JavaFX has really great support for HiDPI screens built-in, as it is able to produce a crisp output even when scaling a user interface by a fractional factor, like 125% or 150%. It can even use different horizontal and vertical scaling factors, i.e. scale an application’s width to 125% and its height’s to 150%, without the result being a blurry mess!</p>\n<p>And because this scaling doesn’t rely on the underlying operating system’s graphical interface, it works even on platforms that don’t support support this natively.</p>\n<p>But since JavaFX’s scaling is entirely independent from the environment it runs on, this means the framework has to be able to retrieve the underlying platform-wide scaling factor and apply it internally by default in order to make users’ life simple. It usually does a good job at this, but it can sometime be a bit problematic.</p>\n<p>Fist of all, there are some cases where detecting the scale factor automatically just doesn’t work well: on Windows or macOS, this is generally not an issue, but on Linux is can be tricky. For instance, JavaFX will attempt to retrieve that info from configuration files typically used by GNOME, which can leaves users of other desktop environments out of luck.<br />\nAnd while it’s always possible for savvy users to add the right bits of configuration to their desktop to workaround the issue (i.e. set <code>org.gnome.desktop.interface scaling-factor</code> or export <code>GDK_SCALE</code>), the results can sometimes be unsatisfactory, for example forcing GNOME’s lack of support for fractional scale factors onto KDE, which does support those.</p>\n<p>And of course, regardless of the environment, there can always be cases where a user might want to use a different scale for their binjr window than for the rest of their desktop.</p>\n<p>For these reasons, the next release of binjr will propose a new set of settings where users can decide to override the default scale factor automatically detected by the framework, be it because that default value was wrong, or because they’d just like something different, for a change.</p>\n<p>Right now, I’ve opted to propose a closed list of settings, ranging from 50 to 350 percents, by 25% intervals. We also only propose square ratios (i.e. identical horizontal and vertical values).<br />\nThis feels like a good compromise in exposing <em>some</em> of the possibilities enabled by JavaFX while keeping the list of available choice reasonably short. </p>\n<p><img alt=\"graphics_settings_UI_scaling\" src=\"https://binjr.eu/assets/images/graphics_settings_UI_scaling.png\" /></p>\n<p>With that said, this is still a work-in-progress, so feel free to chime in if you’d like to propose something else.</p>\n<p>Please note that this option is unfortunately <strong>not available</strong> on macOS, since apparently JavaFX lacks a way to override the detect scaling factor on this platform. Although, as mentioned earlier, the automatic detection is usually flawless on macOS, it is this still a bit disappointing, as scaling an app’s window independently from the rest of the desktop could always prove useful (unless the OS itself already has this built-in? I must admit I don’t know much about Macs).</p>\n<h2 id=\"screenshot-scaling-factor\">Screenshot scaling factor<a class=\"headerlink\" href=\"#screenshot-scaling-factor\" title=\"Permanent link\">¶</a></h2>\n<p>A similar option, that applies to images generated by the screen capture feature in binjr, has been available for a long time; moving it to this menu (it used to sit under <code>Appearance & Behavior</code>), and aligning the options it proposes onto those offered for the UI scaling factor seemed like the sensible thing to do.</p>\n<h2 id=\"give-it-a-try-and-tell-us-what-you-think\">Give it a try and tell us what you think!<a class=\"headerlink\" href=\"#give-it-a-try-and-tell-us-what-you-think\" title=\"Permanent link\">¶</a></h2>\n<p>All this is planned for the upcoming 3.17 release, but you can try it already by using the preview build <a href=\"https://github.com/binjr/binjr/releases/tag/v3.17.0-SNAPSHOT\">available here</a>.</p>", "image": "https://binjr.eu/assets/images/graphics_settings_panel.png", "date_published": "2024-02-27T00:00:00+00:00", "authors": [{"name": "fthevenet"}], "tags": null}, {"id": "https://binjr.eu/blog/2023/08/the-benefit-of-wall-clock-time-data-in-method-profiling/", "url": "https://binjr.eu/blog/2023/08/the-benefit-of-wall-clock-time-data-in-method-profiling/", "title": "The benefit of wall clock time data in method profiling", "content_html": "<h1 id=\"the-benefit-of-wall-clock-time-data-in-method-profiling\">The benefit of wall clock time data in method profiling<a class=\"headerlink\" href=\"#the-benefit-of-wall-clock-time-data-in-method-profiling\" title=\"Permanent link\">¶</a></h1>\n<p>As a companion to our overview of the <a href=\"../new-data-adapter-jdk-flight-recorder/\">new JFR data adapter in binjr</a>, here’s an illustration of how having good visualization options for the wall clock time component of method profiling events can help gain deeper insights out of a JFR profile, from a recent Real Life\u2122 investigation.</p>\n<p>In this example, we are faced with an application whose startup time increased dramatically following a migration of some pieces in the software stack, to the point of becoming unbearable.</p>\n<!-- more -->\n\n<h3 id=\"what-can-we-learn-from-time-series-ie-wall-clock-time\">What can we learn from time series (i.e. wall clock time)?<a class=\"headerlink\" href=\"#what-can-we-learn-from-time-series-ie-wall-clock-time\" title=\"Permanent link\">¶</a></h3>\n<p>We first plot the standard metrics from a JFR capture, and we can clearly see a pattern in CPU usage, heap statistics and GC during the startup sequence that singles out a long period where the application seems to be stuck into what looks like a single threaded, repetitive operation in the critical path, preventing any further progress until it is completed:</p>\n<p><img alt=\"startup_cpu_heap_gc\" src=\"https://binjr.eu/assets/images/Wall-clock-method-profiling-metrics.png\" /></p>\n<p><em>(NB: the highlight was “added in post”; I didn’t mean to mislead anyone into rejoicing that this has finally been implemented. But it will be. One day. Probably.)</em></p>\n<p>How can we tell it is single threaded? The CPU usage flat-lining at ~8% on a 12 cores machine is the main tell. And the same kind of operation in a loop? Well, at this stage is it only a hunch, but the regularity in both CPU and mem/GC activity strongly supports it: let’s call that “duck profiling” - if it consumes CPU like a duck and allocates memory like a duck, then it is probably a duck (albeit a pretty strange duck).</p>\n<p>Then, we can very easily filter out the application’s log on the that specific period of time, only to realize the application didn’t log anything during that period; lots of events before or after but nothing during (not pictured: nothing to see). </p>\n<p>This strongly suggests all processing is taking place in either the underlying framework (Spring) or the in JVM itself.</p>\n<h3 id=\"what-can-we-learn-from-flame-graphs-ie-cpu-time\">What can we learn from flame graphs (i.e. cpu time)?<a class=\"headerlink\" href=\"#what-can-we-learn-from-flame-graphs-ie-cpu-time\" title=\"Permanent link\">¶</a></h3>\n<p>Meanwhile, a flame graph (courtesy of JMC) for the complete startup sequence shows it is literally dominated by a single kind of action: the computation of cryptographic hash triggered by jar signature verification:</p>\n<p><img alt=\"flamegraph\" src=\"https://binjr.eu/assets/images/Wall-clock-method-profiling-flamegraph.png\" /></p>\n<p>The flame graph very clearly indicate that this is where most of the CPU time is being spent, but it doesn’t really tell us anything about the relationship between the jar verification it highlights and the pattern we see in the plotted metrics. </p>\n<h3 id=\"putting-it-all-together\">Putting it all together<a class=\"headerlink\" href=\"#putting-it-all-together\" title=\"Permanent link\">¶</a></h3>\n<p>Once the ability to zoom in on a time interval and produce a flame graph out of those events only is added, we will be able to figure out whether or not there is indeed a link between the two immediately. But until then, what we <strong>can</strong> do it to filter out the method profiling data on the method that we care about in binjr’s JFR event view and have a look at the distribution density for these events via the histogram view. </p>\n<p>And in this case, it is indeed quite telling: these events occur predominantly during the time interval we previously identified:</p>\n<p><img alt=\"image\" src=\"https://binjr.eu/assets/images/Wall-clock-method-profiling-events.png\" /></p>\n<p>As it turns out, the root cause for all this is <a href=\"https://github.com/spring-projects/spring-framework/issues/9371\">a bad interaction between Spring component scanning and signed jars</a>, a pretty old issue but one that can still bite today, apparently (and, in case you’re curious, <a href=\"https://docs.spring.io/spring-framework/reference/core/beans/classpath-scanning.html#beans-scanning-index\">this is how you work around it</a>. Don’t ask me more, I know close to nothing about Spring).</p>", "image": "https://binjr.eu/assets/images/Wall-clock-method-profiling-metrics.png", "date_published": "2023-08-10T00:00:00+00:00", "authors": [{"name": "fthevenet"}], "tags": null}, {"id": "https://binjr.eu/blog/2023/08/new-data-adapter-jdk-flight-recorder/", "url": "https://binjr.eu/blog/2023/08/new-data-adapter-jdk-flight-recorder/", "title": "New Data Adapter: JDK Flight Recorder", "content_html": "<h1 id=\"new-data-adapter-jdk-flight-recorder\">New Data Adapter: JDK Flight Recorder<a class=\"headerlink\" href=\"#new-data-adapter-jdk-flight-recorder\" title=\"Permanent link\">¶</a></h1>\n<p>It has been a pretty long time since we’ve added support for a new data source in binjr, but coming up in release 3.13 is something quite new indeed: support for recordings produced by JDK Flight Recorder (JFR, for short).</p>\n<p>So what, exactly, is JFR? To quote Wikipedia:</p>\n<blockquote>\n<p>JDK Flight Recorder is an event recorder built into the OpenJDK <a href=\"https://en.wikipedia.org/wiki/Java_virtual_machine\">Java virtual machine</a>. It can be thought of as the software equivalent of a Data Flight Recorder (Black Box) in a commercial aircraft. It captures information about the JVM itself, and the application running in the JVM. There is a wide variety of data captured, for example method profiling, allocation profiling and garbage collection related events. The technology was open sourced in 2018.<br />\nAnalysis and visualization of flight recordings are normally done using <a href=\"https://en.wikipedia.org/wiki/JDK_Mission_Control\">JDK Mission Control (JMC)</a>.</p>\n</blockquote>\n<p>Every single event recorded by JFR naturally includes a timestamp, making it a pretty straight-forward source of data for binjr, one that can certainly benefit for the freeform navigation and dynamic view composition binjr allows.</p>\n<!-- more -->\n\n<h2 id=\"binjr-is-not-a-jmc-replacement\">Binjr Is Not a JMC Replacement<a class=\"headerlink\" href=\"#binjr-is-not-a-jmc-replacement\" title=\"Permanent link\">¶</a></h2>\n<p>At least not for the time being; the initial plan is to play on the strength of the app and bring what it does well (browsing trough time series) to JFR recordings, not try to achieve feature parity with JMC, nor make binjr a fully-fledged profiler.</p>\n<p>Later down the line, we will probably consider adding some new visualization type, more specifically oriented to data types contained in JFR recordings, when those make sense and mix well with the other existing one, and more generally speaking, work well within the time-based navigation paradigm in binjr.</p>\n<p>For example, the idea of a flame-graph representation for method profiling data that can be refined on selecting the events in specific period on a time line sounds quite promising and would be a naturally fit for binjr’s navigation’s style (and AFAIK, not something that is easily done in JMC at the moment).</p>\n<h2 id=\"whats-in-the-box\">What’s in the box?<a class=\"headerlink\" href=\"#whats-in-the-box\" title=\"Permanent link\">¶</a></h2>\n<p>But this is <strong>The Future\u2122</strong> (maybe…), not what we have right-now. So <strong>what</strong> do we have, then?</p>\n<p>It takes the form of a single Data Adapter which add a new source type aptly named “JFR”. </p>\n<p>Upon opening a <code>.jfr</code> file using this adapter, two distinct sources are added to the workspace; both offer a hierarchical view of the various types of events recorded in the file, but allow for a different visualization type for the items they expose.</p>\n<h3 id=\"the-jfrevents-source\">The <code>JFR:Events</code> source<a class=\"headerlink\" href=\"#the-jfrevents-source\" title=\"Permanent link\">¶</a></h3>\n<p>When dragging items for the source named <code>[JFR: Events] my_recording.jfr</code> onto the worksheet area, a view similar to that used for log files is created and a textual representation of the selected events are shown. </p>\n<p><img alt=\"image\" src=\"https://binjr.eu/assets/images/blog_01_JFR_charts.png\" /></p>\n<p>Like for log files, you can keep on adding more even types onto the same page, and use the filtering box to refine the event view based on their textual content and the event density histogram to filter out on their timestamps.</p>\n<p>In essence, the core experience is fundamentally that of using the <code>jfr</code> command line tool and grep/sed/awk’ing the results in a terminal emulator, while offering all the refinements of the binjr UI: dynamic coloring for event types, fast index-based filtering, facets computation, visual representation of the events occurrence on a timeline and the ability to persist the entire state of a session at anytime, to re-open later or share.</p>\n<p>But he most useful feature might possibly be that you can seamlessly merge on a single view events coming from different JFR recording files or, for that matter, any other source compatible with the event visualization (now handily identified by a small icon next to a source pane or worksheet tab’s title).</p>\n<p>This makes it remarkably easy to produced a unified and dynamically filterable view of a series of events that don’t have the same point of origin, like getting the full picture from the exchange between a client and its server by mixing events from 4 different sources; a jfr recording for both the client and server processes, as well as the log files produced by each application.</p>\n<h3 id=\"the-jfrcharts-source\">The <code>JFR:Charts</code> source<a class=\"headerlink\" href=\"#the-jfrcharts-source\" title=\"Permanent link\">¶</a></h3>\n<p>The JFR Charts source is very reminiscent of the core binjr experience: it allows for every types of event in a JFR recording that contain fields typed as numbers to be plotted as time series on various types of charts.</p>\n<p><img alt=\"image\" src=\"https://binjr.eu/assets/images/blog_01_JFR_events.png\" /></p>\n<p>Plotting values over time makes perfect and immediate sense for a majority of all the available numeric field in JFR, like in the case of CPU usage or heap statistics, while for some others… well… not so much!<br />\nFor thing like memory addresses or identifiers, well, let’s just say that it makes for some “interesting” charts…</p>\n<p>For now, the majority of event fields are presented in their raw form, but as the adapter matures, more and more specialization will be added, to prune out the fields that make no sense in plotting (like the aforementioned memory addresses or thread ids, etc…) and limit the amount of noise in the UI. \nAn other kind of special treatment for events is when the value of a field determines a category that is worth distinguishing as a distinct sources, like in the case of the Reference type counts in the GC category, where the kind of reference (final, soft, weak, phantom) is conveyed by a field’s value rather than an event type.</p>\n<p>Again, like for the JFR:Events source, there’s nothing stopping you from mixing in any given charts metrics from a JFR recording with some others coming from different sources, like your <a href=\"https://www.netdata.cloud/\">Netdata</a> or <a href=\"https://github.com/fbacchella/jrds\">JRDS</a> monitoring system, or from ad-hoc data gathered in CSV or <a href=\"https://oss.oetiker.ch/rrdtool/index.en.html\">RRD</a> files.</p>\n<h3 id=\"visualizing-events-and-charts-in-sync\">Visualizing events and charts in sync<a class=\"headerlink\" href=\"#visualizing-events-and-charts-in-sync\" title=\"Permanent link\">¶</a></h3>\n<p>Although it is not possible to mix events and charts in a same worksheet, it is nonetheless possible to link the timelines of several worksheets, so that changes applied to one apply to the other ones, keeping them in sync.</p>\n<p>Used together with the ability to detach worksheets from the main window, you can then compose dynamic rich views, that allow for peeking into events and charts simultaneously: </p>\n<video controls muted src=\"https://binjr.eu/assets/videos/blog_01_JFR_sync_charts_events.mp4\" type=\"video/mp4\"/>\n</video>\n<h2 id=\"whats-next\">What’s next?<a class=\"headerlink\" href=\"#whats-next\" title=\"Permanent link\">¶</a></h2>\n<p>This is the first draft for this new adapter, and we’re planning on expanding its capabilities in the future.</p>\n<p>As mentioned before, support for flame graphs is very much one that we will be looking to add next. Other features, such as the ability to plug directly into a running JVM and stream events in real time, may come later on, but we can’t make any promise as it might prove more difficult to integrate within binjr’s core feature set and philosophy.</p>\n<p>With all that said, the adapter in its current state is working well, and we think it can be of some real use; please give it a try and do not hesitate to by leave a comment below and share your thoughts on what works, what doesn’t and what is still needed to make it a really unique and useful tool.</p>\n<p>Thank you and happy profiling!</p>", "image": "https://binjr.eu/assets/images/blog_01_JFR_charts.png", "date_published": "2023-08-09T00:00:00+00:00", "authors": [{"name": "fthevenet"}], "tags": null}]}