We have 3 java thread calling native code where easylogging++ framework is used for logging. The app threads run for a while until the JVM crash happens. This is on a Windows 10 64 Bit PC using Java 8 U172. it happens every 30 minutes.
Below is the hs_err_pid5052 created.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffe1a71e02d, pid=5052, tid=0x0000000000001ea4
#
# JRE version: Java(TM) SE Runtime Environment (8.0_172-b11) (build 1.8.0_172-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.172-b11 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [iSerial.dll+0xe02d]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# 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 (0x000000001eb25000): JavaThread "Device Id: 11 Device Name : BLOCK" [_thread_in_native, id=7844, stack(0x000000002be30000,0x000000002bf30000)]
siginfo: ExceptionCode=0xc0000005, reading address 0xffffffffffffffff
Registers:
RAX=0x000000002934a3a0, RBX=0x0000000027cdcf08, RCX=0x453d0f35522ec1dd, RDX=0x000000002934a3a0
RSP=0x000000002bf2e740, RBP=0x000000002bf2efc0, RSI=0x000000002bf2eb90, RDI=0x000000002bf2eb80
R8 =0x453d0f35522ec1dd, R9 =0x0000000000d599a8, R10=0x0000000029354d40, R11=0x0000000000000000
R12=0x0000000000000000, R13=0x0000000027cdcf08, R14=0x000000002bf2f040, R15=0x000000001eb25000
RIP=0x00007ffe1a71e02d, EFLAGS=0x0000000000010202
Top of Stack: (sp=0x000000002bf2e740)
0x000000002bf2e740: 0000000000d59990 000000002934a3a0
0x000000002bf2e750: 0000000000000000 00007ffe1a71d31f
0x000000002bf2e760: 0000000000d59990 000000002934a3a0
0x000000002bf2e770: 453d0f35522ec1dd 000000002934a3a0
0x000000002bf2e780: 0000000000000000 0000000000000080
0x000000002bf2e790: 000000002bf2efc0 00007ffe1a71e4d4
0x000000002bf2e7a0: 0000000000d59990 000000002934a3a0
0x000000002bf2e7b0: 453d0f35522ec1dd 0000000000000000
0x000000002bf2e7c0: 000000002934a390 453d0f35522ec1cd
0x000000002bf2e7d0: 000000002934a1b0 0000000029395700
0x000000002bf2e7e0: 000000000000003b 0000000000d68ac0
0x000000002bf2e7f0: 0000000029395708 000000002934a3a0
0x000000002bf2e800: 0000000000000015 0000000000d59990
0x000000002bf2e810: 0000000000000001 0800000000000000
0x000000002bf2e820: 0000000000000001 000000002bf2e850
0x000000002bf2e830: 0000000000d59990 00007ffe1a71ed73
Instructions: (pc=0x00007ffe1a71e02d)
0x00007ffe1a71e00d: cc cc cc 4c 89 44 24 18 48 89 54 24 10 48 89 4c
0x00007ffe1a71e01d: 24 08 48 83 ec 18 48 8b 44 24 28 48 8b 4c 24 30
0x00007ffe1a71e02d: 8b 09 39 08 75 09 c7 04 24 01 00 00 00 eb 07 c7
0x00007ffe1a71e03d: 04 24 00 00 00 00 0f b6 04 24 48 83 c4 18 c3 cc
Register to memory mapping:
RAX=0x000000002934a3a0 is an unknown value
RBX={method} {0x0000000027cdcf10} 'open' '(Ljava/lang/String;IBCBCCCCCCI)I' in 'com/hctsi/comm/Serial'
RCX=0x453d0f35522ec1dd is an unknown value
RDX=0x000000002934a3a0 is an unknown value
RSP=0x000000002bf2e740 is pointing into the stack for thread: 0x000000001eb25000
RBP=0x000000002bf2efc0 is pointing into the stack for thread: 0x000000001eb25000
RSI=0x000000002bf2eb90 is pointing into the stack for thread: 0x000000001eb25000
RDI=0x000000002bf2eb80 is pointing into the stack for thread: 0x000000001eb25000
R8 =0x453d0f35522ec1dd is an unknown value
R9 =0x0000000000d599a8 is an unknown value
R10=0x0000000029354d40 is an unknown value
R11=0x0000000000000000 is an unknown value
R12=0x0000000000000000 is an unknown value
R13={method} {0x0000000027cdcf10} 'open' '(Ljava/lang/String;IBCBCCCCCCI)I' in 'com/hctsi/comm/Serial'
R14=0x000000002bf2f040 is pointing into the stack for thread: 0x000000001eb25000
R15=0x000000001eb25000 is a thread
Stack: [0x000000002be30000,0x000000002bf30000], sp=0x000000002bf2e740, free space=1017k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [iSerial.dll+0xe02d]
C [iSerial.dll+0xd31f]
C [iSerial.dll+0xe4d4]
C [iSerial.dll+0x18ee6]
C [iSerial.dll+0x15099]
C [iSerial.dll+0xfddf]
C [iSerial.dll+0x3575]
C [iSerial.dll+0x1f63b]
C [iSerial.dll+0x1d7bb]
C [iSerial.dll+0x1b6cb]
C [iSerial.dll+0x176ba]
C [iSerial.dll+0x3f5f]
C [iSerial.dll+0x2da30]
C [iSerial.dll+0x2ab7f]
C [iSerial.dll+0x2ae1d]
C [iSerial.dll+0x23749]
C [iSerial.dll+0x2370d]
C [iSerial.dll+0x2eb74]
C [iSerial.dll+0x2e730]
C 0x0000000002d98c67
Every Thread checks execute the below logic every 30 seconds. I suspect this is where the issue happens.
void StartLog()
{
el::Configurations conf("C:\\logs\\iserial-conf.conf");
el::Loggers::reconfigureAllLoggers(conf);
logger = el::Loggers::getLogger("default");
el::Helpers::installPreRollOutCallback(renameLogFile);
}