Ошибка JCO - необработанное исключение в 0x77106214 в java.exe: 0xC0000374: повреждена куча - PullRequest
0 голосов
/ 19 октября 2018

Я получаю ошибку

Unhandled exception at 0x77106214 in java.exe: 0xC0000374: A heap has been corrupted

При длительном запуске приложения на сервере tomcat 8, Java 8. В приложении я подключаю SAPB1 с библиотекой JCO.Некоторое время он работает хорошо, но через пару часов JVM выходит из строя и выдает ошибку, как указано выше.Мой код был сделан из этой полезной ссылки.И в приложении я использую приложение синхронизации (запланированное задание) для получения данных из SAPB1.Из-за ошибки Кажется, что при использовании JNI возникает ошибка, эта ошибка распространяется обратно в JVM, поэтому происходит сбой.

Используемый JcoQuery упоминается ниже

ВЫБРАТЬ DocEntry, DocNum, CardName, CardCode, docTotal, UpdateTS, UpdateDate, DocDate, Комментарии, DocStatus, DocDueDate, ReceiptNum ОТ OPOR, ГДЕ ObjType = 22 И преобразовывать (дату / время, (ВЫБРАТЬ КОНВЕРТ (DATETIME)UpdateDate, 112) + '' + CONVERT (CHAR (8), (ВЫБЕРИТЕ CAST (ВЛЕВО (ВПРАВО (000000) + CAST (UpdateTS AS VARCHAR), 6), 2) + ':' + RIGHT (ВЛЕВО (ВПРАВО ('000000' + CAST (UpdateTS AS VARCHAR), 6), 4), 2) + ':' + RIGHT ('000000' + CAST (UpdateTS AS VARCHAR), 2) как время)), 108))))>конвертировать (datetime, (ВЫБРАТЬ КОНВЕРТ (ДАТИМАЦИЯ, КОНВЕРТ (CHAR (8), CAST ('2018-10-19 15: 11: 00.60' КАК ДАТА), 112) + '' + CONVERT (CHAR (8), (ВЫБРАТЬCAST (ВЛЕВО (ВПРАВО («000000» + CAST («1233» КАК VARCHAR), 6), 2) + «:» + ВПРАВО (ВЛЕВО (ВПРАВО («000000» + CAST («1233» КАК VARCHAR), 6), 4), 2) + ':' + RIGHT ('000000' + CAST ('1233' AS VARCHAR), 2) КАК ВРЕМЯ)), 108)))) ЗАКАЗАТЬ ПО DocNum

Используемый код указан ниже

private <T> List<T> getData(Class<T> klazz, ICompany company, JcoQuery jcoQuery) throws Exception {
        IRecordset recordSet = null;
        List<T> result = new ArrayList<T>();
        try {
            recordSet = SBOCOMUtil.newRecordset(company);
            String query = jcoQuery.getQuery();
            System.out.println("Query : "+query);
            List<String> fieldNameList = jcoQuery.getResultFieldList();
            recordSet.doQuery(query);
            int index = recordSet.getRecordCount();
            // print out column names first - CardCode(item 0) and CardName(item 1)
            System.out.println(recordSet.getFields().item(0).getName() + ":" +recordSet.getFields().item(0).getValue()
                + "\t\t"
                + recordSet.getFields().item(1).getName() + ":" + recordSet.getFields().item(1).getValue()
            );
            recordSet.moveFirst();
            // iterate through all rows
            for (int i = 0; i < index; i++) {
                result.add(setObject(klazz, fieldNameList, recordSet));
                recordSet.moveNext();
            } 
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            try {
                recordSet.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }

Ошибкакак упомянуто в этой ссылке

Stack: [0x15810000,0x15860000], sp=0x1585d858, free space=310k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [ntdll.dll+0x41f49]
C [ntdll.dll+0x41d6a]
C [sbojni.dll+0xa465]
C [sbojni.dll+0x1b31]
C [sbojni.dll+0x1e99]
J 5321 com.sap.smb.sbo.wrapper.com.Dispatch.invokev(Ljava/lang/Object;Ljava/lang/String;III[Lcom/sap/smb/sbo/wrapper/com/Variant;[I)Lcom/sap/smb/sbo/wrapper/com/Variant; (0 bytes) @ 0x027aa54c [0x027aa460+0xec]
J 5320 C1 com.sap.smb.sbo.wrapper.com.Dispatch.invokev(Ljava/lang/Object;Ljava/lang/String;I[Lcom/sap/smb/sbo/wrapper/com/Variant;[I)Lcom/sap/smb/sbo/wrapper/com/Variant; (31 bytes) @ 0x0263f1c8 [0x0263f160+0x68]
j com.sap.smb.sbo.wrapper.com.Dispatch.get(Ljava/lang/Object;Ljava/lang/String;)Lcom/sap/smb/sbo/wrapper/com/Variant;+10
j com.sap.smb.sbo.api.Company.getCompanyName()Ljava/lang/String;+6
j com.gtl.app.sapb1.adapter.sabpb1.connection.JcoCompanyConnector.connect()Z+246
j com.gtl.app.sapb1.adapter.sabpb1.connection.JcoDataFetcher.getData(Ljava/lang/Class;Lcom/gtl/app/sapb1/adapter/sabpb1/query/JcoQuery;)Ljava/util/List;+6
j com.gtl.app.sapb1.adapter.service.impl.PurchaseOrderServiceImpl.getPurchaseOrderList(Lcom/gtl/app/erp/api/service/request/GetPurchaseOrderListRequest;)Lcom/gtl/app/erp/api/service/response/GetPurchaseOrderListResponse;+63
j com.gtl.app.sapb1.adapter.controller.PurchaseOrderController.getPurchaseOrderList(Lcom/gtl/app/erp/api/service/request/GetPurchaseOrderListRequest;)Lorg/springframework/http/ResponseEntity;+5
j sun.reflect.GeneratedMethodAccessor92.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+40
J 204 C1 sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (10 bytes) @ 0x02680bc0 [0x02680b90+0x30]

Internal exceptions (10 events):
Event: 60835.818 Thread 0x11bf7000 Exception <a 'com/sap/smb/sbo/wrapper/com/ComFailException'> (0x0468e300) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\prims\jni.cpp, line 709]
Event: 62479.265 Thread 0x11bf7000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': -1> (0x04deef38) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 62479.265 Thread 0x11bf7000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': -1> (0x04def158) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 62479.630 Thread 0x11bf3c00 Exception <a 'java/io/IOException'> (0x046e8660) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\prims\jni.cpp, line 709]
Event: 66178.572 Thread 0x24ddd800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 83> (0x05d6cc80) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 66178.583 Thread 0x24ddd800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 31> (0x05d97808) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 66178.585 Thread 0x24ddd800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 60> (0x05d9f518) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 66178.586 Thread 0x24ddd800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 88> (0x05da1608) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 66178.588 Thread 0x24ddd800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException': 31> (0x05db1a70) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\interpreter\interpreterRuntime.cpp, line 366]
Event: 66392.516 Thread 0x132bf400 Exception <a 'com/sap/smb/sbo/wrapper/com/ComFailException'> (0x0497bc30) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u172\10810\hotspot\src\share\vm\prims\jni.cpp, line 709]
...