通过jna调用so出现异常导致java进程终止,查看堆栈信息
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f95520d9880, pid=2647, tid=0x00007f9570dd2700
#
# JRE version: OpenJDK Runtime Environment (8.0_292-b10) (build 1.8.0_292-8u292-b10-0ubuntu1~18.04-b10)
# Java VM: OpenJDK 64-Bit Server VM (25.292-b10 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libOSAdaptor.so+0x3880] dMutexLock+0x59
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
--------------- T H R E A D ---------------
Current thread (0x00007f956c00b800): JavaThread "main" [_thread_in_native, id=2649, stack(0x00007f9570cd3000,0x00007f9570dd3000)]
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000
Registers:
RAX=0x0000000000000000, RBX=0x00007f956c4d06a0, RCX=0x00007f9551c2a93b, RDX=0x00007f9551e95560
RSP=0x00007f9570dd0180, RBP=0x00007f9570dd02c0, RSI=0x00000000ffffffff, RDI=0x0000000000000000
R8 =0x0000000000000000, R9 =0x0000000000000004, R10=0x00007f956c0008d0, R11=0x00007f95520d9827
R12=0x0000000000000000, R13=0x0000000000000008, R14=0x0000000000000006, R15=0x00007f9570dd0a40
RIP=0x00007f95520d9880, EFLAGS=0x0000000000010246, CSGSFS=0x002b000000000033, ERR=0x0000000000000004
TRAPNO=0x000000000000000e
Top of Stack: (sp=0x00007f9570dd0180)
0x00007f9570dd0180: ffffffff00000002 0000000000000000
0x00007f9570dd0190: 0000000000000000 0000000100000000
0x00007f9570dd01a0: 0000000000000000 0000000000000000
0x00007f9570dd01b0: 0000000000000000 0000000000000000
0x00007f9570dd01c0: 000000006176616a 0000000000000000
0x00007f9570dd01d0: 1dc13d8000000230 000034840f001579
0x00007f9570dd01e0: 43786574754d645d 7420206574616572
0x00007f9570dd01f0: 0000000000000000 0000000000000000
0x00007f9570dd0200: 1212040202203e18 0000000000000000
0x00007f9570dd0210: 0000000000000000 0000000000000000
0x00007f9570dd0220: 0000000000000000 0000000000000000
0x00007f9570dd0230: 0000000000000000 0000000000000000
0x00007f9570dd0240: 0000000000000000 0000000000000000
0x00007f9570dd0250: cafebabecafebabe 0000000000000058
0x00007f9570dd0260: 0000000670dd0480 0000000000000007
0x00007f9570dd0270: 0000000000000060 00007f956c0008f0
0x00007f9570dd0280: 0000000000000080 ffffffffffffffb0
0x00007f9570dd0290: 0000000000000001 0000003100000006
0x00007f9570dd02a0: 0000000000000000 0000000000000000
0x00007f9570dd02b0: 00007f956c4d06a0 fcd6906a0a18ba00
0x00007f9570dd02c0: 00007f9570dd0300 00007f9551ea393d
0x00007f9570dd02d0: 00007f9570dd02f0 00007f9551e95560
0x00007f9570dd02e0: 00007f9551c2a93b 00007f9551c2a948
0x00007f9570dd02f0: 000000006c4d06a0 fcd6906a0a18ba00
0x00007f9570dd0300: 00007f9570dd0340 00007f9551ea4072
0x00007f9570dd0310: 00007f9570dd0340 00007f9551e95560
0x00007f9570dd0320: 00007f9551c2a93b 00007f9551c2a948
0x00007f9570dd0330: 00007f956c4d06a0 fcd6906a0a18ba00
0x00007f9570dd0340: 00007f9570dd0480 00007f9551ad99b7
0x00007f9570dd0350: 0000000000000000 00007f9551e95440
0x00007f9570dd0360: 0000000100000000 00007f956c4d0150
0x00007f9570dd0370: 000000006176616a 0000000000000000
Instructions: (pc=0x00007f95520d9880)
0x00007f95520d9860: ff ff 01 00 00 00 c7 85 e0 fe ff ff 00 00 00 00
0x00007f95520d9870: 83 bd c4 fe ff ff ff 75 14 48 8b 85 e8 fe ff ff
0x00007f95520d9880: 48 8b 00 48 89 c7 e8 65 f1 ff ff eb 69 83 bd c4
0x00007f95520d9890: fe ff ff 00 75 14 48 8b 85 e8 fe ff ff 48 8b 00
Register to memory mapping:
RAX=0x0000000000000000 is an unknown value
RBX=0x00007f956c4d06a0 is an unknown value
RCX=0x00007f9551c2a93b: <offset 0x23993b> in /usr/lib/libMapDBAdaptor.so at 0x00007f95519f1000
RDX=0x00007f9551e95560: MapData_Path+0 in /usr/lib/libMapDBAdaptor.so at 0x00007f95519f1000
RSP=0x00007f9570dd0180 is pointing into the stack for thread: 0x00007f956c00b800
RBP=0x00007f9570dd02c0 is pointing into the stack for thread: 0x00007f956c00b800
RSI=0x00000000ffffffff is an unknown value
RDI=0x0000000000000000 is an unknown value
R8 =0x0000000000000000 is an unknown value
R9 =0x0000000000000004 is an unknown value
R10=0x00007f956c0008d0 is an unknown value
R11=0x00007f95520d9827: dMutexLock+0 in /usr/lib/libOSAdaptor.so at 0x00007f95520d6000
R12=0x0000000000000000 is an unknown value
R13=0x0000000000000008 is an unknown value
R14=0x0000000000000006 is an unknown value
R15=0x00007f9570dd0a40 is pointing into the stack for thread: 0x00007f956c00b800
Stack: [0x00007f9570cd3000,0x00007f9570dd3000], sp=0x00007f9570dd0180, free space=1012k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libOSAdaptor.so+0x3880] dMutexLock+0x59
C [libConfigureCache.so+0x193d] GetConfiguration+0x4f
C [libConfigureCache.so+0x2072] GetChar+0x4b
C [libMapDBAdaptor.so+0xe89b7] ParkingDataMpl::ParkingDataMpl()+0x115
C [libMapDBAdaptor.so+0xe8813] ParkingDataMpl::instance()+0x93
C [libMapDBAdaptor.so+0xe7b0e] requestRoadsByTagAndParkingID+0x3f
C [libServerRoute.so+0x6b841] RouteDataManager::loadLinkInfo(long, char const*, std::unordered_map<long, Link, std::hash<long>, std::equal_to<long>, std::allocator<std::pair<long const, Link> > >&)+0x9d
C [libServerRoute.so+0x6c586] RouteDataManager::LoadDB(long, char const*)+0x10e
C [libServerRoute.so+0x63626] RouteCalculator::Calc(CalcRouteParam&, CalcRouteResult&)+0x112
C [libServerRoute.so+0x67053] requestServerRouteWithDevice+0xdb
C [jna692332108206187444.tmp+0x139c2]
C 0x00007f9570dd1498
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j com.sun.jna.Native.invokeInt(Lcom/sun/jna/Function;JI[Ljava/lang/Object;)I+0
j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;+211
j com.sun.jna.Function.invoke(Ljava/lang/reflect/Method;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+271
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+390
j com.sun.proxy.$Proxy4.requestServerRouteWithDevice([BI[BILcom/sun/jna/ptr/PointerByReference;Lcom/sun/jna/ptr/IntByReference;)I+46
j com.navinfo.utils.NativeUtils.callRoutePlanning([B[B)[B+200
j com.navinfo.test.CallSo.main([Ljava/lang/String;)V+258
v ~StubRoutines::call_stub
--------------- P R O C E S S --------------
网上有博客讲解如何查看此文件,不做介绍。
只关注第一部分
The crash happened outside the Java Virtual Machine in native code.
See problematic frame for where to report the bug.
说明问题不是java部分导致的(jvm没那么脆弱),然后让查看问题产生的帧。
Problematic frame:
C [libOSAdaptor.so+0x3880] dMutexLock+0x59
然后就看到时其中一个依赖的so中产生的问题,看dMutexLock。大概是一个锁导致的。
接下来就可以让对应的同事看一下这个问题了。