Эта проблема возникает примерно раз в день в производственной среде. Нагрузка составляет около 20TPS, и дешифрование AES вызывается дважды для каждого запроса на сервере. Ошибка генерируется не для всех запросов, но вылетает один раз в день. Ниже приведен фрагмент файла hs_err_pid.
Среда выполнения Java обнаружила фатальную ошибку:
SIGSEGV (0xb) at pc = 0x00007f26cc5de47e, pid = 53978, tid = 0x00007f26837f7700 Версия JRE: Java (TM) Среда выполнения SE (8.0_241-b31) (сборка 1.8.0_241-b31) Java ВМ: Java HotSpot (TM) 64-разрядная серверная виртуальная машина ( 25.241-b31 смешанный режим linux -amd64 сжатый ой) Problemati c frame: v ~ StubRoutines :: arrayof_jbyte_fill
Current thread (0x00007f26d0a03800): JavaThread "http-nio-9094-exec-10" daemon
[_thread_in_Java, id=54617, stack(0x00007f26836f7000,0x00007f26837f8000)]
Stack: [0x00007f26836f7000,0x00007f26837f8000], sp=0x00007f26837f44f0, free space=1013k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
v ~StubRoutines::arrayof_jbyte_fill
J 26458 C2 java.util.Arrays.fill([BB)V (21 bytes) @ 0x00007f26cc737ca2
[0x00007f26cc737c60+0x42]
j com.sun.crypto.provider.CipherCore.fillOutputBuffer([BI[BII[B)I+73
j com.sun.crypto.provider.CipherCore.doFinal([BII)[B+65
j com.sun.crypto.provider.AESCipher.engineDoFinal([BII)[B+7
j javax.crypto.Cipher.doFinal([B)[B+30
j com.hello.genesys.common.AES.decrypt([BLjava/lang/String;)[B+92
Ниже приводится расшифровка метод:
public static byte[] decrypt(byte[] data, String password) throws Exception {
try {
log.info("/// Inside the decrypter method of AES class ////");
if (null == cipher) {
log.info("The Cipher is null and hence forming new object of cipher");
cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
}
log.info("Key generation method to be called");
Key k = new SecretKeySpec(password.getBytes(), AES_ENCRYPTION_TYPE);
log.info("Cipher initialization to be done");
cipher.init(Cipher.DECRYPT_MODE, k);
log.info("The byte array value to be returned");
return cipher.doFinal(data);
} catch (Throwable e) {
log.info("Inside Exception of AES decryption method");
e.printStackTrace();
}
return null;
}
Этот метод вызывается в другом классе:
byte[] decrypter = AES.decrypt(decodeToken, _env("tokenSalt"));
Он не генерирует исключение, а вылетает с ошибкой, связанной с arrayof_jbyte_fill . Пожалуйста, помогите мне решить эту проблему, поскольку она возникает только в производственной среде, но не в более низкой среде. Ссылка на файл hs_err_pid для более подробной информации: https://drive.google.com/file/d/1WDG4rm7vIw6HDbhZPtXjud7r8TEh4d74/view?usp=sharing