No description
Find a file
2018-07-15 15:35:38 +02:00
src Finally implemented callstack completely and correctly 2018-07-15 12:56:40 +02:00
ui created ui view for callstack 2018-07-15 15:32:52 +02:00
.gitignore update readme 2018-07-10 22:07:40 +02:00
agent.iml Finally implemented callstack completely and correctly 2018-07-15 12:56:40 +02:00
pom.xml Finally implemented callstack completely and correctly 2018-07-15 12:56:40 +02:00
README.md added screenshot to readme 2018-07-10 22:14:15 +02:00
screenshot.png updated screenshot 2018-07-15 15:35:38 +02:00

perfix

Pretty basic profiling tool for JVM's

screenshot

Highlights:

  • Meant for development time (after process stops, data is gone).
  • Minimal memory footprint (agent < 1 mb).
  • Easy setup (2 commandline arguments for java process)
  • Minimalistic web interface.
  • Execution time is measured in nanoseconds
  • No manual instrumentation necessary using loadtime bytecode manipulation (javassist).
  • No special jdbc configuration necessary (ie no wrapped jdbc driver).
  • The agent is also the server (ui backend).

Usage

  • Agent that instruments loaded classes: -javaagent:/perfix.jar
  • Include classes for instrumentation with -Dperfix.includes=com.project. ...etc (includes subpackages)
  • Web page to report executed methods and sql query excutions:
    * #invocations
    * total execution time for the method in nanoseconds (this is also the sorting order)
    * average time in nanoseconds per method (= total/#invocations)
  • The backend starts on port 2048 by default. Use -Dperfix.port=... to adjust.
  • Start the UI using npm install followed by npm start. the UI starts on port 3000 by default.

roadmap

  • Overhead (in method execution time) not clear yet. I wouldn't use it in production.
  • Finish jdbc query logging (CallableStatement)
  • Implement an actual call stack the way commercial tools work
  • Ability to dynamically turn off metrics to minimize cpu and memory overhead (when response time is below a set treshold)
  • extend the user interface

DISCLAIMER:

This has only been tested on oracle java8 in spring-boot using tomcat web-container