No description
| src | ||
| .gitignore | ||
| pom.xml | ||
| README.md | ||
| screenshot.png | ||
perfix
Pretty basic profiling tool for JVM's
Highlights:
- Meant for development time (after process stops, data is gone).
- Minimal memory footprint (829 kb).
- 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
- build the project using: mvn clean install
- copy perfix-agent-$VERSION.jar to /perfix.jar
- Configure your JVM: -javaagent:/perfix.jar
- Include classes for instrumentation with -Dperfix.includes=com.project. ...etc (includes subpackages)
- Head to http://localhost:2048 for reports on 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) - Use -Dperfix.port=... to change the http server port
roadmap
- Overhead (in method execution time) not clear yet. I wouldn't use it in production.
- Finish jdbc query logging (CallableStatement)
- 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 java V8-15 in spring-boot using tomcat web-container (and apache dbcp)
Javassist raises the following error:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by javassist.util.proxy.SecurityActions (file:/Users/Shautvast/.m2/repository/org/javassist/javassist/3.26.0-GA/javassist-3.26.0-GA.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of javassist.util.proxy.SecurityActions
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
But it works at least up until java 15.
I cannot fix this issue, but I'm working to replace javassist as a dependency.
