开放源代码 Java 分析器

你们有什么可以推荐的 Java 使用方法吗?

唯一的要求是它应该是开源的,或者没有太昂贵的学术许可证。

96134 次浏览

The VisualVM which comes with jdk6 has a basic profiler inside it. VisualVM is provided with the jdk, so if you have the jdk6 installed, you likely have it installed as well.

https://visualvm.github.io/

Netbeans IDE includes a free profiler.

Also, if I remember correctly, the academic license for JProfiler is (relatively) inexpensive.

Ah. Netbeans Profiler, developer.com's "Product of the Year" winner, in 2009.

Java has a basic built in profiler called HProf. I find it useful to compare the results it provides with results from more fully features profilers.

If you are looking for a no-frills, easy to use open source profiler, you may want to take a look at Jip (Java Interactive Profiler). It's published under a BSD license. I found it to be quite useful for small programs. At least, the results it gives are way more easy to understand than hprofs output.

This is quick, dirty, and very effective: just take a few thread dumps, or pause the program several times, and look at the stack traces.

you've got a list here (listing them below, in-case link gets broken)

  • JMemProf
  • JMP
  • DrMem
  • JTreeProfiler
  • NetBeans Profiler
  • JAMon API
  • JBoss Profiler
  • MessAdmin
  • InfraRED
  • TomcatProbe
  • Java Interactive Profiler (JIP)
  • Profiler4j
  • Stopwatch
  • JMeasurement
  • DJProf
  • TIJmp
  • Allmon
  • Appspy
  • EurekaJ
  • japex
  • OKTECH Profiler
  • Perf4j

Java Mission Control, it's free to use for development and it integrates with Eclipse. It has very low overhead (<1%) since it piggybacks on the data the JVM is gathering anyway.

It's very easy to use and it can also give a lot information you typically won't find in other profiling tools, e.g. latency profiling, online memory inspection, detailed gc statistics

The open-source tool jvmtop does include a basic console profiler. Example output:

 JvmTop 0.7.0 alpha - 15:16:34,  amd64,  8 cpus, Linux 2.6.32-27, load avg 0.41
http://code.google.com/p/jvmtop


Profiling PID 24015: org.apache.catalina.startup.Bootstrap


36.16% (    57.57s) hudson.model.AbstractBuild.calcChangeSet()
30.36% (    48.33s) hudson.scm.SubversionChangeLogParser.parse()
7.14% (    11.37s) org.kohsuke.stapler.jelly.JellyClassTearOff.parseScript()
6.25% (     9.95s) net.sf.json.JSONObject.write()
3.13% (     4.98s) ....kohsuke.stapler.jelly.CustomTagLibrary.loadJellyScri()

JVM Monitor is a Java profiler integrated with Eclipse to monitor CPU, threads and memory usage of Java applications.

If further deep analysis is needed, you may use other tools (e.g. TPTP, Memory Analyzer) as a next step.

Consider cutting-edge https://github.com/jvm-profiling-tools/async-profiler

This project is a low overhead sampling profiler for Java that does not suffer from Safepoint bias problem. It features HotSpot-specific APIs to collect stack traces and to track memory allocations. The profiler works with OpenJDK, Oracle JDK and other Java runtimes based on HotSpot JVM.

It's also built-in into IntelliJ IDEA Ultimate: https://www.jetbrains.com/help/idea/cpu-profiler.html.


There is also similar https://github.com/jvm-profiling-tools/honest-profiler.

The comparison between async-profiler and honest-profiler: https://github.com/jvm-profiling-tools/async-profiler/issues/77