1The following are examples of j_profile.d. 2 3This script samples on-CPU stack traces and prints them with Java 4translations. With DTrace, as well as tracing events, you can also sample 5them. Each approach has its own advantages and disadvantages and you are 6encouraged to try both when investigating performance issues (especially 7tracing). Sampling is inaccurate and can miss events, yet is a quick and 8easy way to discover a certain set of performance issues involving on-CPU 9load. 10 11This script samples at 101 Hertz, printing out the 25 most frequently seen 12stack traces down to 10 lines deep. All of these values can be tweaked in 13the script. 14 15Here we run the script on Code/Java/Func_loop. The argument fed to the script 16is the PID of the Java program we wish to investigate. Here the raw output is 17show, then again after filtering using c++filt. 18 19# j_profile.d -p 1312 20Sampling 10-level stacks at 101 Hertz... Hit Ctrl-C to end. 21^C 22 23Top 25 most frequently sampled stacks, 24 25 26 Func_loop.func_c()V 27 Func_loop.func_b()V 28 Func_loop.func_a()V 29 Func_loop.main([Ljava/lang/String;)V 30 StubRoutines (1) 31 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 32 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 33 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 34 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 35 libjvm.so`jni_CallStaticVoidMethod+0x15d 36 30 37 38 Func_loop.func_c()V 39 Func_loop.func_b()V 40 Func_loop.func_a()V 41 Func_loop.main([Ljava/lang/String;)V 42 StubRoutines (1) 43 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 44 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 45 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 46 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 47 libjvm.so`jni_CallStaticVoidMethod+0x15d 48 31 49 50 Func_loop.func_c()V 51 Func_loop.func_b()V 52 Func_loop.func_a()V 53 Func_loop.main([Ljava/lang/String;)V 54 StubRoutines (1) 55 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 56 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 57 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 58 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 59 libjvm.so`jni_CallStaticVoidMethod+0x15d 60 32 61 62 Func_loop.func_c()V 63 Func_loop.func_b()V 64 Func_loop.func_a()V 65 Func_loop.main([Ljava/lang/String;)V 66 StubRoutines (1) 67 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 68 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 69 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 70 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 71 libjvm.so`jni_CallStaticVoidMethod+0x15d 72 33 73 74 Func_loop.func_c()V 75 Func_loop.func_b()V 76 Func_loop.func_a()V 77 Func_loop.main([Ljava/lang/String;)V 78 StubRoutines (1) 79 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 80 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 81 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 82 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 83 libjvm.so`jni_CallStaticVoidMethod+0x15d 84 41 85 86 Func_loop.func_c()V 87 Func_loop.func_b()V 88 Func_loop.func_a()V 89 Func_loop.main([Ljava/lang/String;)V 90 StubRoutines (1) 91 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 92 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 93 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 94 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 95 libjvm.so`jni_CallStaticVoidMethod+0x15d 96 72 97 98 Func_loop.func_c()V 99 Func_loop.func_b()V 100 Func_loop.func_a()V 101 Func_loop.main([Ljava/lang/String;)V 102 StubRoutines (1) 103 libjvm.so`__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x1a3 104 libjvm.so`__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_+0x27 105 libjvm.so`__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_+0x2f 106 libjvm.so`__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_+0x1df 107 libjvm.so`jni_CallStaticVoidMethod+0x15d 108 116 109 110 111The most frequent stacks had Func_loop.func_c() on CPU, with a stack trace 112showing func_b() and func_a() - as expected from the source to Func_loop.java. 113 114 115Now passing that output through c++filt to translate the compiled C++ symbols 116of the JVM. 117 118# j_profile.d -p 1312 -o out.j_profile 119# c++filt out.j_profile 120Sampling 10-level stacks at 101 Hertz... Hit Ctrl-C to end. 121 122Top 25 most frequently sampled stacks, 123 124 125 Func_loop.func_c()V 126 Func_loop.func_b()V 127 Func_loop.func_a()V 128 Func_loop.main([Ljava/lang/String;)V 129 StubRoutines (1) 130 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 131 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 132 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 133 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 134 libjvm.so`jni_CallStaticVoidMethod+0x15d 135 10 136 137 Func_loop.func_c()V 138 Func_loop.func_b()V 139 Func_loop.func_a()V 140 Func_loop.main([Ljava/lang/String;)V 141 StubRoutines (1) 142 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 143 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 144 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 145 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 146 libjvm.so`jni_CallStaticVoidMethod+0x15d 147 13 148 149 Func_loop.func_c()V 150 Func_loop.func_b()V 151 Func_loop.func_a()V 152 Func_loop.main([Ljava/lang/String;)V 153 StubRoutines (1) 154 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 155 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 156 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 157 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 158 libjvm.so`jni_CallStaticVoidMethod+0x15d 159 19 160 161 Func_loop.func_c()V 162 Func_loop.func_b()V 163 Func_loop.func_a()V 164 Func_loop.main([Ljava/lang/String;)V 165 StubRoutines (1) 166 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 167 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 168 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 169 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 170 libjvm.so`jni_CallStaticVoidMethod+0x15d 171 21 172 173 Func_loop.func_c()V 174 Func_loop.func_b()V 175 Func_loop.func_a()V 176 Func_loop.main([Ljava/lang/String;)V 177 StubRoutines (1) 178 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 179 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 180 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 181 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 182 libjvm.so`jni_CallStaticVoidMethod+0x15d 183 29 184 185 Func_loop.func_c()V 186 Func_loop.func_b()V 187 Func_loop.func_a()V 188 Func_loop.main([Ljava/lang/String;)V 189 StubRoutines (1) 190 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 191 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 192 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 193 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 194 libjvm.so`jni_CallStaticVoidMethod+0x15d 195 53 196 197 Func_loop.func_c()V 198 Func_loop.func_b()V 199 Func_loop.func_a()V 200 Func_loop.main([Ljava/lang/String;)V 201 StubRoutines (1) 202 libjvm.so`void JavaCalls::call_helper(JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x1a3 203 libjvm.so`void os::os_exception_wrapper(void(*)(JavaValue*,methodHandle*,JavaCallArguments*,Thread*),JavaValue*,methodHandle*,JavaCallArguments*,Thread*)+0x27 204 libjvm.so`void JavaCalls::call(JavaValue*,methodHandle,JavaCallArguments*,Thread*)+0x2f 205 libjvm.so`void jni_invoke_static(JNIEnv_*,JavaValue*,_jobject*,JNICallType,_jmethodID*,JNI_ArgumentPusher*,Thread*)+0x1df 206 libjvm.so`jni_CallStaticVoidMethod+0x15d 207 74 208 209 210