mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-09-10 15:46:33 -04:00
210 lines
12 KiB
Plaintext
210 lines
12 KiB
Plaintext
The following are examples of j_profile.d.
|
|
|
|
This script samples on-CPU stack traces and prints them with Java
|
|
translations. With DTrace, as well as tracing events, you can also sample
|
|
them. Each approach has its own advantages and disadvantages and you are
|
|
encouraged to try both when investigating performance issues (especially
|
|
tracing). Sampling is inaccurate and can miss events, yet is a quick and
|
|
easy way to discover a certain set of performance issues involving on-CPU
|
|
load.
|
|
|
|
This script samples at 101 Hertz, printing out the 25 most frequently seen
|
|
stack traces down to 10 lines deep. All of these values can be tweaked in
|
|
the script.
|
|
|
|
Here we run the script on Code/Java/Func_loop. The argument fed to the script
|
|
is the PID of the Java program we wish to investigate. Here the raw output is
|
|
show, then again after filtering using c++filt.
|
|
|
|
# j_profile.d -p 1312
|
|
Sampling 10-level stacks at 101 Hertz... Hit Ctrl-C to end.
|
|
^C
|
|
|
|
Top 25 most frequently sampled stacks,
|
|
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
30
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
31
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
32
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
33
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
41
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
72
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3
|
|
libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27
|
|
libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f
|
|
libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
116
|
|
|
|
|
|
The most frequent stacks had Func_loop.func_c() on CPU, with a stack trace
|
|
showing func_b() and func_a() - as expected from the source to Func_loop.java.
|
|
|
|
|
|
Now passing that output through c++filt to translate the compiled C++ symbols
|
|
of the JVM.
|
|
|
|
# j_profile.d -p 1312 -o out.j_profile
|
|
# c++filt out.j_profile
|
|
Sampling 10-level stacks at 101 Hertz... Hit Ctrl-C to end.
|
|
|
|
Top 25 most frequently sampled stacks,
|
|
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
10
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
13
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
19
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
21
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
29
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
53
|
|
|
|
Func_loop.func_c()V
|
|
Func_loop.func_b()V
|
|
Func_loop.func_a()V
|
|
Func_loop.main([Ljava/lang/String;)V
|
|
StubRoutines (1)
|
|
libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3
|
|
libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27
|
|
libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f
|
|
libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df
|
|
libjvm.so`jni_CallStaticVoidMethod+0x15d
|
|
74
|
|
|
|
|