strogiyotec / jprofiler-fusion

Compare profiler with fusion

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Comparing JProfiler with FusionReactor – the battle of best profilers

In our previous blog posts we tried to compare FusionReactor with open source java profiling tools such as GUI based Java VisualVM, and terminal applications such as jcmd and jstack. We concluded that for production level profiling the FusionReactor is an undoubted winner. However, in the Java world, another profiler got a dominant market place. It is called JPofiler and it was developed by people behind ej-technologies. The JPofiler advertises itself as

The Award-Winning All-in-One Java Profiler And indeed this Profiler is no doubt can give deep insides of a running production level application with minimum overhead. The main webpage of JProfiler shows the features that make it the best profiling tool. Today we are going to go through each use case and compare how it can be accomplished by FusionReactor

Under the Hood

First of all, both tools use the same JVM API to collect statistics of a running Java process called java agent. We talked more about Java agents in our blog that covers Java VisualVM.

Launching

The first difference between the tools come from the way they are attached to the Java process. JProfiler is a desktop tool written in Swing and in order to use it you first have to install the app. The download page gives you downloadable app for many supported operating systems with pre-installed JRE. After you installed and launched the profiler you will have to attach it to the Java process running on local machine , remote server or inside of a container. Welcome page In our case we chose a local java process. After that you will have to choose a recording method. JProfiler supports sampling and instrumentation. You can read the in-depth description here but in essence with the choosing sampling JProfiler will periodically record the stracktraces of each thread while instrumentation will modify the bytecode of application classes to trace methods entries and exits record method

For fair comparison we will go with Instrumentation. Finally you can start profiling your app.

Here is the few disadvantages with this process

  1. First of all ,you have to install the executable with JProfiler. With consequent updates, the app must be reinstalled again.
  2. Secondly, the range of supported environments is huge but requires a lot of effords for production environment. By profiling the process in the remote host you need toenable and configure ssh agent in the production machine which requires some development experience.

How is FusionReactor different ? First of all, FusionReactor is a web app. You don't have to install anything on your computer which makes non-IT folks' lives easier. The second biggest difference with JProfiler is that the former one can only be attached to the single Java process on startup. It doesn't matter where you host your Java application whether it's a dedicated server, container or even locally. With FusionReactor your production level application is constantly monitored with a low overhead.

FusionReactor

Exceptional ease of use

The first selling point that JProfiler uses on their website is Exceptional ease of use. We won't doubt it. The interface is tidy and clean. All buttons are intuitive and anyone who is familiar with JVM architecture can easily familiaris themself with the tool and all the metrics it tracks.

Interface

JProfiler has a few main tabs that help you to track your application. Let's compare each of them with what FusionReactor can offer.

Telemetries

Shows top level information about your app(total memory , GC activity, loaded classes , Threads and CPU load) telemtry

The analog to Telemetries in FusionReactor is the Metrics tab that also covers web based metrics. Live memory - real time memory allocated by each object in the heap metrics And here is how web metrics page looks like web

No such information is included in JProfiler's Telemetries

Live memory

Shows you all the allocated objects in the real time memory

Same information can be obtained in FusionReactor under the Memory tab memory

Threads

List all of the application threads with their states threads

In FusionReactor, under the Resources tab you can see the same list of threads. threads

Moreover, each thread is clickable which redirects you to the page with pretty printed stack traces of corresponding thread trace

CPU view

Amount of CPU cycles taken by each method cpu

In FusionReactor, using the Transactions tab you can see the CPU usage on per Thread basics, by clicking on the thread you will see the page similar to JProfiler cpu

Databases

All JDBC calls made by your app(other non JDBC based protocols are supported too for example Cassandra and HBase) database

The JDBC tan in FusionReactor shows you the history of all JDBC queries whether it was a plain JDBC or higher level JPA framework

jdbc

FusionReactor however only support databases with corresponding JDBC driver implementation(which most of the relational databases do)

JEE probes

Web based metrics. It covers the metrics from HTTP server, amount of exceptions and information about the sockets. We believe that information provided in the Requests tab is more powerful and offers vider variety of metrics and ways to detect the performance issue. First of all, all requests history are persisted requests

Requests can be sorted by longest requests and by those which take a bigger amount of memory. You can click on the detail icon next to each request to see the detailed metrics details

For example here is the page that shows how much memory it took and amount of JDBC calls it made.

Zero-configuration remote profiling

Another thing that JProfiler can offer you is a zero-configuration profiling of remote java processes. You must however need to configure ssh tunnel. The same can be applied to FusionReactor as well. FusionReactor's main target is a production observability. When you start your app with FusionReactor's agent attached to it, it exposes the port on the same host machine that is running the admin panel. Remote profiling for FusionReactor is just a matter of opening this port for remote access.

Built-in support for Docker and Kubernetes

JProfiler has a build-in support for containerized environments such as Kubernetes. It's just a matter of choosing the Pod from the main page and JProfiler will give you a list of all java processes. With FusionReactor it's almost that easy. First you don't need to create a Kubernetes service to access the admin panel. All you need to do is to forward ports. Assuming you have kubectl you can use the following command.

kubectl get pods -n <namespace> # get all the pods
kubectl port-forward -n <namespace> <pod_name> 8088:8088 # enable port forwarding

Now you can open the browser and reach out this url http://localhost:8088/

Excellent support for Java Enterprise Frameworks

JProfiler supports the most popular Java frameworks such as database access like JPA/Hibernate and web frameworks such as Spring and JavaEE. Same is true for FusionReactor. Both tools are capable of showing the lifetime of the HTTP Request in Servlet Container and sql queries made from JPA.

Integration with application servers and IDEA

JProfiler is able to monitor java application that run on top of the application servers such as Tomcat or any other Servlet Containers. FusionReactor offers the same capabilities. For example in terms of a Tomcat, FusionReactor needs to be added in the setenv.sh script before you launch the Tomcat tomcat

What FusionReactor supports that JProfiler doesn't

Remote Debugging

You can attach the debugger to the running process without killing the performance of the underlying application with FusionReactor. By default only single Thread will wait on the breakpoint which won't disturb your customers from using the app. You can also tell FusionReactor how long the breakpoint can wait till resuming the execution breakpoint

Notifications

With FusionReactor your application is constantly monitored without you being involved. If something happens with your application , you will get an email with the root cause. Later on you can check yourself whether it's something critical or not

Persistence

The main problem with JProfiler is that you have to manually start recording the data.For example, when you open Exceptions tab you won't see anything unless you press the recording button

exc

It means that the errors that happened before recording are missed. FusionReactor eliminate this problem by constantly monitoring your app. error-hist

All the exceptions can be seen in the Error History tab. Once you found an appropriate exception you can click on Event Snapshot to take a look at the root cause with the information attached(http params of the request, JDBC queries etc). You can also attach the debugger the the root cause right away by pressing the Debug button error-profile

System Metrics

Apart from the Java process you might be interested in how underlying server is doing. FusionReactor shows you System Metrics so you can keep track of everything you want without the terminal and CLI applications.

system

Pricing

Finally, the pricing can make a big difference when choosing the Profiler. In terms of a JProfiler, the Floating package(when profiler can be used by many developers) costs $2199, however if you want to get support and upgrades , the package will cost you $3078. After one year, each new upgrade will cost you $799. With FusionReactor you can choose from Enterprise or Ultimate packages. Here is the details on how these packages are differ from each other(remember you get a whole customer support in both packages) price You can also decrease the bill by choosing an annual based payment. If you choose Enterprise package for a year it will cost you as little as $708 and you also don't have to pay additional fees for getting an updated version of FusionReactor.

Conclusion

Both tools described in this blog are amazing and dominant in Java World. Both of them five you a low cost production level profiling. However, with a broader range of features and cheaper price we highly recommend you to take a look at FusionReactor. If you are interested please book a demo with us.

About

Compare profiler with fusion

License:GNU General Public License v3.0