Capturing and comparing MBean states with JProfiler

2025-04-30
Posted by Ingo Kegel

MBeans expose a wide range of runtime metrics and management operations that are essential for understanding the internal state of Java applications. Traditionally, JProfiler has supported live inspection of MBeans during a profiling session.

With the new MBean snapshot feature in JProfiler 15, it is now possible to capture the complete MBean state, compare snapshots, and analyze metrics offline, even after the application has shut down.

This screencast demonstrates the new functionality with a small Hazelcast application that performs random map operations and registers a custom MBean for triggering cleanup operations.

Along the way, you will see how to:

  • Capture and compare MBean snapshots manually
  • Trigger MBean snapshots programmatically with method triggers
  • Restrict the snapshot scope to specific MBeans

Advanced SSH remote profiling with JProfiler

2025-04-28
Posted by Ingo Kegel

Remote profiling can be challenging when SSH access involves custom setups, proxies, or cloud authentication plugins. JProfiler 15 introduces advanced SSH connection features that remove these obstacles, enabling profiling in complex environments without manual setup.

This screen cast shows how to profile remote JVMs even in situations where the built-in SSH client is insufficient, using AWS Session Manager as an example.

Along the way, you will see how to:

  • Use OpenSSH mode for remote profiling
  • Connect with ProxyCommand and the AWS CLI
  • Handle SSH port forwarding restrictions with netcat mode

Profiling Java applications in VS Code with JProfiler

2025-04-25
Posted by Ingo Kegel

JProfiler now integrates directly into VS Code, bringing the powerful profiling tool into your everyday development workflow.

In this screencast, we profile the Spring Pet Clinic demo and walk through the features of the JProfiler extension for VS Code, including:

  • Toggling profiling mode
  • Automatic setup of profiled packages
  • Source code navigation from profiling views
  • Attach mode for unsupported launch methods (like Maven)
  • Built-in Gradle integration

If you're using a launch method in VS Code that isn't currently supported, let us know — we’re always looking to expand support.

Advanced Kafka probe configuration in JProfiler

2025-04-23
Posted by Ingo Kegel

In our first Kafka screencast, we looked at how JProfiler correlates message flow and CPU usage through producers, consumers, and topic-level call trees.

In this follow-up, we go deeper, showing how to configure custom naming for Kafka messages based on their content.

This enables you to:

  • split call trees by semantic message types
  • track specific event types in probe views
  • add value-level details to single event descriptions
  • visualize outliers in event duration histograms

We also trigger a Kafka message spike via an API call and analyze its impact, all without changing the application code.

Profiling Kafka #1 – Message Flow & Hot Spots

2025-04-22
Posted by Ingo Kegel

Kafka-based applications are notoriously hard to profile. Message flow happens in background threads, stack traces don’t reveal the full picture, and it’s hard to know which topic contributes to which hot spot.

JProfiler’s Kafka probes give you deep insight—producers, consumers, and message-level details are all captured and correlated with performance data.

This screencast walks through profiling a Spring Kafka application, showing how:

  • consumer call trees are split by topic
  • producers link directly into probe views
  • you can correlate CPU hot spots with Kafka topics
  • Kafka events are filterable, inspectable, and aggregatable

Bringing JProfiler to VS Code with Kotlin Multi-Platform

2025-04-16
Posted by Ingo Kegel

At ej-technologies, we've long provided JProfiler integrations for Java IDEs like IntelliJ, Eclipse, and NetBeans. These plugins share a significant amount of logic—profiler configuration, session management, and communication with the JProfiler backend—all written in Kotlin.

When we decided to add support for VS Code, we faced a problem: VS Code extensions run on Node.js, not the JVM. Rewriting the plugin from scratch in TypeScript would have been inefficient. Instead, we turned to Kotlin Multi-Platform (KMP), allowing us to reuse our existing Kotlin code while adapting to the JavaScript ecosystem.

Caching auto-provisioned install4j distributions in CI pipelines

2025-04-14
Posted by Ingo Kegel

Starting with install4j 11.0, integrating install4j into your build system has become much easier: The Gradle, Maven, and Ant plugins can now auto-provision the install4j distribution. This means the plugins will download and cache the appropriate install4j version automatically, so you no longer need to install install4j manually.

Cross-platform JRE bundle creation under threat from JEP 493

2025-04-08
Posted by Ingo Kegel

One of the most valuable capabilities introduced with the Java module system in Java 9 is its support for creating custom runtime images with jlink. Developers can include only the modules they need, resulting in lightweight JRE bundles tailored to the requirements of their applications. Using the --module-path option, it has even been possible to generate those runtime images for different operating systems from a single host machine.

With Java 24, JEP 493 introduces a change that significantly impacts this workflow. JDK vendors can now configure builds without .jmod files, as jlink can optionally extract the required resources from the lib/modules jimage file. While this change reduces the size of the JDK by about 25%, it also removes critical support for cross-platform linking.

Improvements for macOS App Store submissions in install4j 11.0.2

2025-01-14
Posted by Ingo Kegel

install4j 11.0.2 introduces several new features to simplify macOS App Store submissions, including automated entitlement handling for TestFlight, improved support for local testing with development provisioning profiles, and dynamic bundle versioning for easier resubmission of builds.

Refreshed JProfiler IDEA plugin for the new UI

2024-09-23
Posted by Ingo Kegel

Kotlin 2.0 features a total rewrite of the Kotlin compiler known as "Kotlin K2". IntelliJ IDEA will remove support for the old compiler in version 2024.3 impacting all plugins that depend on the Kotlin plugin, such as the JProfiler IDEA plugin.

The newest version of the JProfiler IDEA plugin for IntelliJ IDEA now includes support for Kotlin K2 mode. This means that the JProfiler plugin no longer prevents switching to K2 mode in IntelliJ IDEA 2024.2 and is now ready for IntelliJ IDEA 2024.3 where K2 mode will be the default and plugins depending on the old API will no longer be loaded.

We took this opportunity to align the JProfiler plugin with another recent major change in IntelliJ IDEA: The new UI, which became the default in IntelliJ IDEA 2024.2. It is impractical for IDEA plugins to support both the old and the new UI, so we decided to change the UI once the new UI became widely used.

Connect
Read with RSS
Subscribe by email
Follow on
Blog Archive