Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ public CrashLog parse(String uuid, String crashLog) {
String pid = null;
List<StackFrame> frames = new ArrayList<>();
String datetime = null;
StringBuilder message = new StringBuilder();
boolean incomplete = false;

String[] lines = NEWLINE_SPLITTER.split(crashLog);
Expand All @@ -130,7 +129,6 @@ public CrashLog parse(String uuid, String crashLog) {
case NEW:
if (line.startsWith(
"# A fatal error has been detected by the Java Runtime Environment:")) {
message.append("\n\n");
state = State.MESSAGE; // jump directly to MESSAGE state
}
break;
Expand All @@ -151,8 +149,6 @@ public CrashLog parse(String uuid, String crashLog) {
int endIdx = line.indexOf(',', pidIdx);
pid = line.substring(pidIdx + 4, endIdx);
}
} else {
message.append(line.substring(2)).append('\n');
}
}
break;
Expand All @@ -174,7 +170,6 @@ public CrashLog parse(String uuid, String crashLog) {
case THREAD:
// Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
if (line.startsWith("Native frames: ")) {
message.append('\n').append(line).append('\n');
state = State.STACKTRACE;
}
break;
Expand All @@ -183,7 +178,6 @@ public CrashLog parse(String uuid, String crashLog) {
state = State.DONE;
} else {
// Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
message.append(line).append('\n');
frames.add(parseLine(line));
}
break;
Expand All @@ -200,10 +194,10 @@ public CrashLog parse(String uuid, String crashLog) {
// incomplete crash log
incomplete = true;
}
String message = "Process terminated by signal " + (signal != null ? signal : "UNKNOWN");

ErrorData error =
new ErrorData(
signal, message.toString(), new StackTrace(frames.toArray(new StackFrame[0])));
new ErrorData(signal, message, new StackTrace(frames.toArray(new StackFrame[0])));
// We can not really extract the full metadata and os info from the crash log
// This code assumes the parser is run on the same machine as the crash happened
Metadata metadata = new Metadata("dd-trace-java", VersionInfo.VERSION, "java", null);
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"SIGSEGV","message":"\n\nJRE version: OpenJDK Runtime Environment Temurin-22.0.1+8 (22.0.1+8) (build 22.0.1+8)\nJava VM: OpenJDK 64-Bit Server VM Temurin-22.0.1+8 (22.0.1+8, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)\nProblematic frame:\nC [libpthread.so.0+0x9cd5] __pthread_clockjoin_ex+0x255\n\nNative frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)\nC [libpthread.so.0+0x9cd5] __pthread_clockjoin_ex+0x255\n","source_type":"crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"file":"libpthread.so.0","function":"__pthread_clockjoin_ex"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.55.0-SNAPSHOT~6b33361cb4"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":"576034"},"timestamp":"2024-09-20T13:19:06Z","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"SIGSEGV","message":"Process terminated by signal SIGSEGV","source_type":"crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"file":"libpthread.so.0","function":"__pthread_clockjoin_ex"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.56.0-SNAPSHOT~37a6360670"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":"576034"},"timestamp":"2024-09-20T13:19:06Z","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"INVALID","message":"\n\n fatal error: OutOfMemory encountered: Java heap space\nJRE version: OpenJDK Runtime Environment (Zulu 8.70.0.23-CA-macos-aarch64) (8.0_372-b07) (build 1.8.0_372-b07)\nJava VM: OpenJDK 64-Bit Server VM (25.372-b07 mixed mode bsd-aarch64 compressed oops)\n\nNative frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)\nV [libjvm.dylib+0x565d30] VMError::report_and_die()+0x468\nV [libjvm.dylib+0x1941a0] report_vm_error(char const*, int, char const*, char const*)+0x5c\nV [libjvm.dylib+0x1943d8] report_java_out_of_memory(char const*)+0xfc\nV [libjvm.dylib+0x70430] CollectedHeap::common_mem_allocate_noinit(KlassHandle, unsigned long, Thread*)+0x128\nV [libjvm.dylib+0x53eba8] TypeArrayKlass::allocate_common(int, bool, Thread*)+0xfc\nV [libjvm.dylib+0x285b6c] InterpreterRuntime::newarray(JavaThread*, BasicType, int)+0x48\nj datadog.smoketest.crashtracking.CrashtrackingTestApplication.main([Ljava/lang/String;)V+105\nv ~StubRoutines::call_stub\nV [libjvm.dylib+0x28f86c] JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)+0x840\nV [libjvm.dylib+0x2d3b44] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)+0x294\nV [libjvm.dylib+0x2d7160] jni_CallStaticVoidMethod+0x188\nC [java+0x6404] JavaMain+0xa10\nC [libsystem_pthread.dylib+0x6f94] _pthread_start+0x88\nC [libsystem_pthread.dylib+0x1d34] thread_start+0x8\n","source_type":"crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"file":"libjvm.dylib","function":"VMError::report_and_die()"},{"file":"libjvm.dylib","function":"report_vm_error(char const*, int, char const*, char const*)"},{"file":"libjvm.dylib","function":"report_java_out_of_memory(char const*)"},{"file":"libjvm.dylib","function":"CollectedHeap::common_mem_allocate_noinit(KlassHandle, unsigned long, Thread*)"},{"file":"libjvm.dylib","function":"TypeArrayKlass::allocate_common(int, bool, Thread*)"},{"file":"libjvm.dylib","function":"InterpreterRuntime::newarray(JavaThread*, BasicType, int)"},{"function":"datadog.smoketest.crashtracking.CrashtrackingTestApplication.main([Ljava/lang/String;)V","line":105},{"function":" ~StubRoutines::call_stub"},{"file":"libjvm.dylib","function":"JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)"},{"file":"libjvm.dylib","function":"jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)"},{"file":"libjvm.dylib","function":"jni_CallStaticVoidMethod"},{"file":"java","function":"JavaMain"},{"file":"libsystem_pthread.dylib","function":"_pthread_start"},{"file":"libsystem_pthread.dylib","function":"thread_start"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.55.0-SNAPSHOT~6b33361cb4"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":"96267"},"uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"INVALID","message":"Process terminated by signal INVALID","source_type":"crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"file":"libjvm.dylib","function":"VMError::report_and_die()"},{"file":"libjvm.dylib","function":"report_vm_error(char const*, int, char const*, char const*)"},{"file":"libjvm.dylib","function":"report_java_out_of_memory(char const*)"},{"file":"libjvm.dylib","function":"CollectedHeap::common_mem_allocate_noinit(KlassHandle, unsigned long, Thread*)"},{"file":"libjvm.dylib","function":"TypeArrayKlass::allocate_common(int, bool, Thread*)"},{"file":"libjvm.dylib","function":"InterpreterRuntime::newarray(JavaThread*, BasicType, int)"},{"function":"datadog.smoketest.crashtracking.CrashtrackingTestApplication.main([Ljava/lang/String;)V","line":105},{"function":" ~StubRoutines::call_stub"},{"file":"libjvm.dylib","function":"JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*)"},{"file":"libjvm.dylib","function":"jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, Thread*)"},{"file":"libjvm.dylib","function":"jni_CallStaticVoidMethod"},{"file":"java","function":"JavaMain"},{"file":"libsystem_pthread.dylib","function":"_pthread_start"},{"file":"libsystem_pthread.dylib","function":"thread_start"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.56.0-SNAPSHOT~37a6360670"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":"96267"},"uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"SIGSEGV","message":"\n\nJRE version: OpenJDK Runtime Environment Zulu17.42+20-SA (17.0.7+7) (build 17.0.7+7-LTS)\nJava VM: OpenJDK 64-Bit Server VM Zulu17.42+20-SA (17.0.7+7-LTS, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)\nProblematic frame:\nV [libjvm.so+0x6b7187] vframeStreamForte::forte_next()+0x797\n\nNative frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)\nV [libjvm.so+0x6b7187] vframeStreamForte::forte_next()+0x797\nV [libjvm.so+0x6b79ad] forte_fill_call_trace_given_top(JavaThread*, ASGCT_CallTrace*, int, frame) [clone .isra.22]+0x7bd\nV [libjvm.so+0x6b8123] AsyncGetCallTrace+0x193\nC [libjavaProfiler586350205236920700.so+0x146c8] Profiler::getJavaTraceAsync(void*, ASGCT_CallFrame*, int, StackContext*, bool*) [clone .isra.531]+0xd8\nC [libjavaProfiler586350205236920700.so+0x1c18d] Profiler::recordSample(void*, unsigned long long, int, int, Event*)+0xa2d\nC [libjavaProfiler586350205236920700.so+0x1d128] WallClock::sharedSignalHandler(int, siginfo_t*, void*)+0x148\nC [libpthread.so.0+0x12cf0]\nV [libjvm.so+0x85f9e9] JfrStackTrace::record_safe(JavaThread*, int)+0x5a9\nV [libjvm.so+0x861650] JfrStackTraceRepository::record_for_leak_profiler(JavaThread*, int)+0x50\nV [libjvm.so+0xb1ecba] ObjectSampler::sample(HeapWordImpl**, unsigned long, JavaThread*)+0x10a\nV [libjvm.so+0x81abee] JfrAllocationTracer::JfrAllocationTracer(Klass const*, HeapWordImpl**, unsigned long, bool, JavaThread*)+0x5e\nV [libjvm.so+0x3afa20] AllocTracer::send_allocation_in_new_tlab(Klass*, HeapWordImpl**, unsigned long, unsigned long, JavaThread*)+0x30\nV [libjvm.so+0xa8f8ed] MemAllocator::allocate() const+0x13d\nV [libjvm.so+0x7e443c] InstanceKlass::allocate_objArray(int, int, JavaThread*)+0x13c\nV [libjvm.so+0xbe1b59] OptoRuntime::new_array_C(Klass*, int, JavaThread*)+0x129\n","source_type":"crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"file":"libjvm.so","function":"vframeStreamForte::forte_next()"},{"file":"libjvm.so","function":"forte_fill_call_trace_given_top(JavaThread*, ASGCT_CallTrace*, int, frame) [clone .isra.22]"},{"file":"libjvm.so","function":"AsyncGetCallTrace"},{"file":"libjavaProfiler586350205236920700.so","function":"Profiler::getJavaTraceAsync(void*, ASGCT_CallFrame*, int, StackContext*, bool*) [clone .isra.531]"},{"file":"libjavaProfiler586350205236920700.so","function":"Profiler::recordSample(void*, unsigned long long, int, int, Event*)"},{"file":"libjavaProfiler586350205236920700.so","function":"WallClock::sharedSignalHandler(int, siginfo_t*, void*)"},{"file":"libpthread.so.0","function":"libpthread.so.0+0x12cf0"},{"file":"libjvm.so","function":"JfrStackTrace::record_safe(JavaThread*, int)"},{"file":"libjvm.so","function":"JfrStackTraceRepository::record_for_leak_profiler(JavaThread*, int)"},{"file":"libjvm.so","function":"ObjectSampler::sample(HeapWordImpl**, unsigned long, JavaThread*)"},{"file":"libjvm.so","function":"JfrAllocationTracer::JfrAllocationTracer(Klass const*, HeapWordImpl**, unsigned long, bool, JavaThread*)"},{"file":"libjvm.so","function":"AllocTracer::send_allocation_in_new_tlab(Klass*, HeapWordImpl**, unsigned long, unsigned long, JavaThread*)"},{"file":"libjvm.so","function":"MemAllocator::allocate() const"},{"file":"libjvm.so","function":"InstanceKlass::allocate_objArray(int, int, JavaThread*)"},{"file":"libjvm.so","function":"OptoRuntime::new_array_C(Klass*, int, JavaThread*)"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.55.0-SNAPSHOT~6b33361cb4"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":"161958"},"timestamp":"2023-10-17T20:25:14+08:00","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
{"data_schema_version":"1.0","error":{"is_crash":true,"kind":"SIGSEGV","message":"Process terminated by signal SIGSEGV","source_type":"crashtracking","stack":{"format":"CrashTrackerV1","frames":[{"file":"libjvm.so","function":"vframeStreamForte::forte_next()"},{"file":"libjvm.so","function":"forte_fill_call_trace_given_top(JavaThread*, ASGCT_CallTrace*, int, frame) [clone .isra.22]"},{"file":"libjvm.so","function":"AsyncGetCallTrace"},{"file":"libjavaProfiler586350205236920700.so","function":"Profiler::getJavaTraceAsync(void*, ASGCT_CallFrame*, int, StackContext*, bool*) [clone .isra.531]"},{"file":"libjavaProfiler586350205236920700.so","function":"Profiler::recordSample(void*, unsigned long long, int, int, Event*)"},{"file":"libjavaProfiler586350205236920700.so","function":"WallClock::sharedSignalHandler(int, siginfo_t*, void*)"},{"file":"libpthread.so.0","function":"libpthread.so.0+0x12cf0"},{"file":"libjvm.so","function":"JfrStackTrace::record_safe(JavaThread*, int)"},{"file":"libjvm.so","function":"JfrStackTraceRepository::record_for_leak_profiler(JavaThread*, int)"},{"file":"libjvm.so","function":"ObjectSampler::sample(HeapWordImpl**, unsigned long, JavaThread*)"},{"file":"libjvm.so","function":"JfrAllocationTracer::JfrAllocationTracer(Klass const*, HeapWordImpl**, unsigned long, bool, JavaThread*)"},{"file":"libjvm.so","function":"AllocTracer::send_allocation_in_new_tlab(Klass*, HeapWordImpl**, unsigned long, unsigned long, JavaThread*)"},{"file":"libjvm.so","function":"MemAllocator::allocate() const"},{"file":"libjvm.so","function":"InstanceKlass::allocate_objArray(int, int, JavaThread*)"},{"file":"libjvm.so","function":"OptoRuntime::new_array_C(Klass*, int, JavaThread*)"}]}},"incomplete":false,"metadata":{"family":"java","library_name":"dd-trace-java","library_version":"1.56.0-SNAPSHOT~37a6360670"},"os_info":{"architecture":"aarch64","bitness":"64","os_type":"Mac OS X","version":{"Semantic":[15,7,1]}},"proc_info":{"pid":"161958"},"timestamp":"2023-10-17T20:25:14+08:00","uuid":"a4194cd6-8cb3-45fd-9bd9-3af83e0a3ad3","version_id":0}
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ private String assertCrashPing() throws InterruptedException, IOException {
private void assertCrashData(String uuid) throws InterruptedException, IOException {
CrashTelemetryData crashData = crashEvents.poll(DATA_TIMEOUT_MS, TimeUnit.MILLISECONDS);
assertNotNull(crashData, "Crash data not uploaded");
assertTrue(crashData.payload.get(0).message.contains("OutOfMemory"));
assertTrue(crashData.payload.get(0).message.contains("Process terminated by signal"));
assertTrue(crashData.payload.get(0).tags.contains("severity:crash"));
final Map<?, ?> map = moshi.adapter(Map.class).fromJson(crashData.payload.get(0).message);
final Object receivedUuid = map.get("uuid");
Expand Down