Forked from https://code.google.com/p/lightweight-java-profiler/
- profiler will not run unless the file /tmp/profile exists
- current state is dumped by issuing a SIGUSR1 to the java process
- added test java code
$ make docker-compile
Output (Click to expand)
docker build . -t ljp-jessie:latest -q
sha256:d1a391f06294ffa83ab47d7345df5c944d9cb2ee0feb7c8879ba4cb9ec5e476b
docker run --privileged=true -it -v /home/scott/workspace/lightweight-java-profiler:/workdir ljp-jessie:latest
+ cd /workdir
+ make clean
rm -rf build-64/* *.class
+ make compile
g++ -I/usr/lib/jvm/java-8-openjdk-amd64//include -I/usr/lib/jvm/java-8-openjdk-amd64//include/linux -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -Fvisibility=hidden -fPIC -c /workdir/src/profiler.cc -o build-64/profiler.pic.o
g++ -I/usr/lib/jvm/java-8-openjdk-amd64//include -I/usr/lib/jvm/java-8-openjdk-amd64//include/linux -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -Fvisibility=hidden -fPIC -c /workdir/src/display.cc -o build-64/display.pic.o
g++ -I/usr/lib/jvm/java-8-openjdk-amd64//include -I/usr/lib/jvm/java-8-openjdk-amd64//include/linux -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -Fvisibility=hidden -fPIC -c /workdir/src/entry.cc -o build-64/entry.pic.o
g++ -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -shared -o build-64/liblagent.so \
-Bsymbolic build-64/profiler.pic.o build-64/display.pic.o build-64/entry.pic.o -ldl
+ ./runtest.sh
+ JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
+ TESTFILE=/tmp/teststack
+ touch /tmp/profile
+ make testjava
/usr/lib/jvm/java-8-openjdk-amd64//bin/javac teststack.java
+ rm -f /tmp/teststack
+ sleep 5
+ /usr/lib/jvm/java-8-openjdk-amd64//bin/java -agentpath:/workdir/build-64/liblagent.so=file=/tmp/teststack teststack
0
+ check_state
+ pkill -SIGUSR1 -f teststack
++ ls /tmp/currstate-2017-08-06-22-10-32
+ '[' '!' /tmp/currstate-2017-08-06-22-10-32 ']'
+ egrep 'teststack\.method|teststack\.main' /tmp/currstate-2017-08-06-22-10-32
+ '[' 0 == 0 ']'
+ echo 'test passed!'
test passed!
+ rm /tmp/currstate-2017-08-06-22-10-32
+ sleep 5
500
+ check_state
+ pkill -SIGUSR1 -f teststack
++ ls /tmp/currstate-2017-08-06-22-10-37
+ '[' '!' /tmp/currstate-2017-08-06-22-10-37 ']'
+ egrep 'teststack\.method|teststack\.main' /tmp/currstate-2017-08-06-22-10-37
+ '[' 0 == 0 ']'
+ echo 'test passed!'
test passed!
+ rm /tmp/currstate-2017-08-06-22-10-37
++ jobs -p
+ wait 66
1000
1500
2000
2500
+ sleep 1
+ '[' '!' -f /tmp/teststack ']'
+ '[' '!' -s /tmp/teststack ']'
+ exit 0
$ make BITS=64 clean compile
rm -rf build-64/* *.class
g++ -I/usr/jdk/latest/include -I/usr/jdk/latest/include/linux -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -Fvisibility=hidden -fPIC -c /home/scott/workspace/lightweight-java-profiler/src/display.cc -o build-64/display.pic.o
g++ -I/usr/jdk/latest/include -I/usr/jdk/latest/include/linux -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -Fvisibility=hidden -fPIC -c /home/scott/workspace/lightweight-java-profiler/src/entry.cc -o build-64/entry.pic.o
g++ -I/usr/jdk/latest/include -I/usr/jdk/latest/include/linux -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -Fvisibility=hidden -fPIC -c /home/scott/workspace/lightweight-java-profiler/src/profiler.cc -o build-64/profiler.pic.o
g++ -mfpmath=sse -std=gnu++0x -fdiagnostics-show-option -fno-exceptions -fno-omit-frame-pointer -fno-strict-aliasing -funsigned-char -fno-asynchronous-unwind-tables -m64 -msse2 -g -D__STDC_FORMAT_MACROS -Wframe-larger-than=16384 -Wno-unused-but-set-variable -Wunused-but-set-parameter -Wvla -Wno-conversion-null -Wno-builtin-macro-redefined -Wall -Werror -Wformat-security -Wno-char-subscripts -Wno-sign-compare -Wno-strict-overflow -Wwrite-strings -Wnon-virtual-dtor -Woverloaded-virtual -O2 -shared -o build-64/liblagent.so \
-Bsymbolic build-64/display.pic.o build-64/entry.pic.o build-64/profiler.pic.o -ldl
$ ./runtest.sh
/usr/jdk/latest/bin/javac teststack.java
0
500
1000
1500
test passed!
$ ls /tmp/teststack
/tmp/teststack
$ head /tmp/teststack
1
1 41 java.lang.String.replace(String.java:2067)
sun.invoke.util.BytecodeDescriptor.unparseSig(BytecodeDescriptor.java:132)
sun.invoke.util.BytecodeDescriptor.unparseMethod(BytecodeDescriptor.java:119)
sun.invoke.util.BytecodeDescriptor.unparse(BytecodeDescriptor.java:104)
java.lang.invoke.MethodType.toMethodDescriptorString(MethodType.java:1090)
java.lang.invoke.InvokerBytecodeGenerator.emitStaticInvoke(InvokerBytecodeGenerator.java:840)
java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCodeBytes(InvokerBytecodeGenerator.java:689)
java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:616)
java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:629)
$ ./runanddumpstate.sh
/usr/jdk/latest/bin/javac teststack.java
$ date
Fri Jan 22 16:48:22 PST 2016
$ ls /tmp/currstate-2016-01-22-16-48-19 /tmp/teststack
/tmp/currstate-2016-01-22-16-48-19 /tmp/teststack
$ head /tmp/currstate-2016-01-22-16-48-19
1 40 java.lang.Object.hashCode(Object.java:-1)
java.lang.invoke.MethodType.hashCode(MethodType.java:777)
java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry.<init>(MethodType.java:1284)
java.lang.invoke.MethodType$ConcurrentWeakInternSet.get(MethodType.java:1230)
java.lang.invoke.MethodType.makeImpl(MethodType.java:301)
java.lang.invoke.MethodType.methodType(MethodType.java:206)
java.lang.invoke.LambdaForm.signatureType(LambdaForm.java:538)
java.lang.invoke.LambdaForm.methodType(LambdaForm.java:503)
java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:623)
java.lang.invoke.DirectMethodHandle.maybeCompile(DirectMethodHandle.java:265)