信号描述
SIGSEGV,SIGBUS,SIGFPE,SIGPIPE,SIGILL - 用于隐式空指针检查实现等。
SIGQUIT - 线程转储支持 - 在标准错误流中转储Java堆栈跟踪。 (可选)
SIGTERM、SIGINT、SIGHUP - 用于在VM异常终止时支持关闭钩子机制(java.lang.Runtime.addShutdownHook)。 (可选)
SIGUSR1 - 用于实现java.lang.Thread.interrupt方法。 (可配置). Solaris 10 OS开始不再使用。Linux保留.
SIGUSR2 - 内部使用。 (可配置). Solaris 10 OS开始不再使用。
SIGABRT - HotSpot VM不处理此信号。取而代之,在致命错误处理后调用abort函数。如果应用程序使用此信号,则应终止进程以保留预期的语义。
致命错误日志表明崩溃发生在本机库中,可能是本机代码或JNI库代码中的bug。当然,崩溃可能是由其他原因引起的,但分析库和任何核心文件或崩溃转储是一个很好的起点。
在这种情况下,发生了一个SIGSEGV,其中一个线程在库libdtagentcore.so中执行。在某些情况下,本机库中的错误会表现为Java VM代码中的崩溃。考虑以下崩溃,其中一个JavaThread在_thread_in_vm状态下失败(表示它正在执行Java VM代码)
- 如果您在本机应用程序库中获得崩溃(如您的情况),则可以尝试将本机调试器附加到核心文件或崩溃转储,如果可用。根据操作系统,本机调试器是dbx、gdb或windbg。
- 另一种方法是在命令行中添加-Xcheck:jni选项运行。该选项不能保证找到JNI代码的所有问题,但可以帮助识别大量问题。
- 如果崩溃所在的本机库是Java运行时环境的一部分(例如awt.dll,net.dll等),那么可能遇到了库或API错误。如果经过进一步分析,您得出结论这是库或API错误,则尽可能收集数据并提交错误或支持请求。