Perfino's powerful business transaction engine gives you maximum insight with minimum overhead. Perfino is a powerful, reliable and affordable Java APM.


Immediately see what's wrong

When you log into perfino, the dashboard shows you if everything is OK - or if something is going wrong. perfino gives you fine-grained control over what level of performance is acceptable for your business. You can define your own thresholds for telemetries from your applications and monitored VMs and check out the dashboard to make sure that everything is nominal.

Show calls between VMs

Perfino can monitor business transactions that span multiple VMs. A call in the web layer that goes on to an EJB server and further to a web service - in perfino these operations are connected, even when you do method-level sampling. The call graph not only shows you the big picture of what is happening right now, but also what has happened in the past.

React to off-nominal conditions

When something is seriously wrong, you want to take action: Create alerts, send emails or gather more detailed data. In perfino, you use triggers and actions to configure your emergency response strategies. Realizing a scenario like "When a business transaction hangs, take a thread dump and send it to my inbox" is very easy in the perfino UI.

Telemetries everywhere

Telemetries in perfino capture important scalar values in the monitored VMs, like the number of database operation per minute. As sparklines in the dashboard and VMs view, they give you an instant appreciation of the current trends, in their full display they go back in time to the very beginning. Telemetry data is never discarded, only converted to higher resolutions.

Ultra-flexible business transactions

Perfino automatically detects a wide range of business transactions from subsystems like servlet containers, EJBs or RMI calls. In addition, it offers you several ways to make any method call into a business transactions. Whether you explicitly select POJO methods in the perfino UI, tell perfino about an important annotation or use the API to create transactions in your own code depends on what is most practical for you.

Call tree of business transactions

Transactions in perfino are organized into a cumulated call tree - just as you know it from your favorite profiler. The level of detail is up to you - it depends on what you configure as business transactions. Policy violations like very slow transactions are shown separately in the call tree, so you can analyze them in isolation. perfino also correlates business transactions on the server with page load times in the browser.

Database performance and bottlenecks

Database operations like JDBC statements, or queries to mongoDB and other NoSQL databases are first class citizens in perfino. When you ask the question "Which SQL query is the slowest in my application?", perfino delivers the answer together with cumulated backtraces pointing back to the business transactions that are responsible for the queries.

Method level sampling

To investigate the internal call structure and the method level hot spots of business transactions, perfino performs periodic method level sampling on a per-transaction basis. For slow and very slow transactions you can configure automatic method level sampling. In many cases, these samples give you an immediate explanation for performance problems that are not related to databases.

Historical comparisons

Being able to compare performance between two points in time is important, especially for agile release managements. With perfino, you can look back indefinitely to compare selected business transactions or entire call trees - your data is cumulated to larger time intervals as time goes by. And comparison functionality is built directly into the views that you use for viewing the data.

Cross-over to profiling

Defense in depth is a strategy that applies to many situations in life. When your business is on the line, you sometimes need every tool there is and that is why perfino can bring in native JVMTI sampling and ultimately even prepare a VM for a JProfiler connection. So that when you need the full capabilities of a profiler, it's at your fingertips.