Home

Awesome

PerfJ

Join the chat at https://gitter.im/coderplay/perfj

PerfJ is a wrapper of linux perf for java programs.

As Brendan Gregg's words

In order to profile java programs, you need a profiler that can sample stack traces. There has historically been two types of profilers:

Ideally, we need a profile result that does it all: system and Java code paths. Apart from convenience, it also shows system code-paths in Java context, which can be crucial for understanding a profile properly.

The problem is getting a system profiler to understand Java methods and stack traces. If you try Linux perf_events, for example, you'll see hexadecimal numbers and broken stack traces, as it can't convert addresses into Java symbols, and can't walk the JVM stack.

There are two specific problems:

Thanks to the work by Brendan Gregg and Zoltan Majo. We will have an option to turn on the preservation of frame pointer on JDK 8u60+.

This project is based on Johannes Rudolph's work at here, but PerfJ is more convenient and safer to use.

PerfJ can produce flame graph through Brendan Gregg's FlameGraph tool .

Below is an example shows the hotspot of a pure java leveldb program. Green is Java layer, yellow is JVM layer, and red is system layer(native user-level, or kernel). Longer bar means higher cpu percentage.

PerfJ CPU Flame Graph Example

There is a raw interactive SVG image [here] (http://blog.minzhou.info/perfj/perfj.svg).

Prerequisites

Build

Before starting building PerfJ, make sure gcc is already installed.

checkout the source from github

git clone https://github.com/coderplay/perfj.git

and run below in the future building

cd perfj
./gradlew releaseTarGz

Installation

Before install PerfJ, you should install Linux perf first

To install perf on centos/redhat/fedora linux system

yum install perf.x86_64

To install perf on ubuntu linux system

apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

then download perfj-*.tgz from the [release page] (https://github.com/coderplay/perfj/releases), untar it

tar zxvf perf-*.tgz

Usage

Check the [wiki pages] (https://github.com/coderplay/perfj/wiki)

License

This library is licensed under GPLv2. See the LICENSE file.