SAP integration slowness - Wm 10.15

Product/components used and version/fix level:

IS_10.15_Core_Fix4
SAP_10.1_Fix11

Description

Hello,

We encouter some latencies regarding SAP integrations.

A trigger is activated (topic durable subscriber CONCURRENT with 100 maximum threads).
During its execution, those 3 services from WmSAP package are very slow :

  • pub.sap.client:createTID
  • pub.sap.transport.ALE:OutboundProcess
  • pub.sap.client:confirmTID

It processes less than 10 JMS messages per second.
We want to integrate 10 millions IDoc to SAP.

Actions already tried :
We tried to set the “Store message body” of the SAP connection to “Off” but it changed nothing.
We deleted the whole txStore directory, but the issue still remains.

Thead Dump informations :

"Server Thread Pool" Id=780 in WAITING
	at java.base@11.0.18/jdk.internal.misc.Unsafe.park(Native Method)
	- waiting on <0x28c21d8f> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync) owned by thread="Thread-646" Id=1741
	at java.base@11.0.18/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194)
	at java.base@11.0.18/java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:885)
	at java.base@11.0.18/java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:1009)
	at java.base@11.0.18/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1324)
	at java.base@11.0.18/java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:738)
	at com.wm.adapter.sap.xtn.SAPTransactionManager.cacheGet(SAPTransactionManager.java:164)
	at com.wm.adapter.sap.xtn.SAPTransactionManager.get(SAPTransactionManager.java:1122)
	- locked <0x2c542fbd> (a java.lang.String)
	at com.wm.adapter.sap.xtn.SAPTransactionManager.setTargetSystem(SAPTransactionManager.java:2013)
	at com.wm.adapter.sap.cci.BasicAdapterService.initTransaction(BasicAdapterService.java:218)
	at com.wm.adapter.sap.cci.BasicAdapterService.initTransaction(BasicAdapterService.java:180)
	at com.wm.adapter.sap.cci.ConfirmTID.init(ConfirmTID.java:88)
	at com.wm.adapter.sap.cci.BasicAdapterService.execute(BasicAdapterService.java:117)
	at com.wm.adk.cci.interaction.WmInteraction.execute(WmInteraction.java:76)
	at com.wm.pkg.art.ns.AdapterServiceNode.invokeService(AdapterServiceNode.java:396)
	at com.wm.pkg.art.ns.ARTNSService.baseInvoke(ARTNSService.java:62)
	at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:761)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.continueProcess(AbstractMonitorInvokeProcessor.java:356)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.processRuntime(AbstractMonitorInvokeProcessor.java:151)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.process(AbstractMonitorInvokeProcessor.java:171)
	at wm.bci.internal.BciServiceInvokeNotifier.process(BciServiceInvokeNotifier.java:53)
	at com.wm.ps.serviceMock.ServiceInterceptor.process(ServiceInterceptor.java:360)
	at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
	at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:67)
	at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
	at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
	at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
	at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
	at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
	at com.wm.app.b2b.server.invoke.ConcurrentRequestLimitProcessor.process(ConcurrentRequestLimitProcessor.java:57)
	at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:631)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:436)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:394)
	at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260)
	at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:236)
	at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:263)
	at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:662)
	at com.wm.lang.flow.FlowState.step(FlowState.java:527)
	at com.wm.lang.flow.FlowState.invoke(FlowState.java:494)
	at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1164)
	at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:761)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.continueProcess(AbstractMonitorInvokeProcessor.java:356)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.processRuntime(AbstractMonitorInvokeProcessor.java:151)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.process(AbstractMonitorInvokeProcessor.java:171)
	at wm.bci.internal.BciServiceInvokeNotifier.process(BciServiceInvokeNotifier.java:53)
	at com.wm.ps.serviceMock.ServiceInterceptor.process(ServiceInterceptor.java:360)
	at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
	at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:67)
	at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
	at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
	at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
	at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
	at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
	at com.wm.app.b2b.server.invoke.ConcurrentRequestLimitProcessor.process(ConcurrentRequestLimitProcessor.java:57)
	at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:631)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:436)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:394)
	at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260)
	at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:236)
	at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:263)
	at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:662)
	at com.wm.lang.flow.FlowState.step(FlowState.java:527)
	at com.wm.lang.flow.FlowState.invoke(FlowState.java:494)
	at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1164)
	at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:761)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.continueProcess(AbstractMonitorInvokeProcessor.java:356)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.processRuntime(AbstractMonitorInvokeProcessor.java:141)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.process(AbstractMonitorInvokeProcessor.java:171)
	at wm.bci.internal.BciServiceInvokeNotifier.process(BciServiceInvokeNotifier.java:53)
	at com.wm.ps.serviceMock.ServiceInterceptor.process(ServiceInterceptor.java:360)
	at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
	at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:67)
	at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
	at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
	at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
	at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
	at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
	at com.wm.app.b2b.server.invoke.ConcurrentRequestLimitProcessor.process(ConcurrentRequestLimitProcessor.java:57)
	at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:631)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:436)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:352)
	at com.wm.app.b2b.server.jms.consumer.JMSTrigger.invokeService(JMSTrigger.java:1683)
	at com.wm.app.b2b.server.jms.consumer.JMSTrigger.processSingleMessage(JMSTrigger.java:1272)
	at com.wm.app.b2b.server.jms.consumer.JMSTrigger.processMessage(JMSTrigger.java:1238)
	at com.wm.app.b2b.server.jms.consumer.ExecutionTask.process(ExecutionTask.java:620)
	at com.wm.app.b2b.server.jms.consumer.ExecutionTask.processMessages(ExecutionTask.java:233)
	at com.wm.app.b2b.server.jms.consumer.ContinuousExecutionTask.processMessages(ContinuousExecutionTask.java:235)
	at com.wm.app.b2b.server.jms.consumer.ContinuousExecutionTask.run(ContinuousExecutionTask.java:68)
	at com.wm.util.pool.PooledThread.run(PooledThread.java:127)
	- locked <0x1d7e57b0> (a com.wm.app.b2b.server.TMPooledThread)
	at java.base@11.0.18/java.lang.Thread.run(Thread.java:829)
"Thread-646" Id=1741 in BLOCKED
- locked <0x28c21d8f> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
	at com.wm.adapter.sap.xtn.SAPTransactionManager.flushCache(SAPTransactionManager.java:422)
	- waiting on <0x065ed98b> (a com.wm.adapter.sap.xtn.Transaction) owned by thread="Server Thread Pool" Id=10804
	at com.wm.adapter.sap.xtn.SAPTransactionManager.access$600(SAPTransactionManager.java:58)
	at com.wm.adapter.sap.xtn.SAPTransactionManager$1.run(SAPTransactionManager.java:659)
	at java.base@11.0.18/java.lang.Thread.run(Thread.java:829)
"Server Thread Pool" Id=10804 in RUNNABLE
	at java.base@11.0.18/java.io.FileDescriptor.close0(Native Method)
	at java.base@11.0.18/java.io.FileDescriptor.close(FileDescriptor.java:297)
	- locked <0x479b6fa6> (a java.io.FileDescriptor)
	at java.base@11.0.18/java.io.FileOutputStream$1.close(FileOutputStream.java:398)
	at java.base@11.0.18/java.io.FileDescriptor.closeAll(FileDescriptor.java:355)
	- locked <0x479b6fa6> (a java.io.FileDescriptor)
	at java.base@11.0.18/java.io.FileOutputStream.close(FileOutputStream.java:396)
	at com.wm.adapter.sap.xtn.FileTransactionStore.writeXtn(FileTransactionStore.java:839)
	- locked <0x014acb91> (a com.wm.adapter.sap.xtn.FileTransactionStore$TimedLock)
	at com.wm.adapter.sap.xtn.FileTransactionStore.update(FileTransactionStore.java:1243)
	at com.wm.adapter.sap.xtn.SAPTransactionManager.update(SAPTransactionManager.java:1560)
	at com.wm.adapter.sap.xtn.SAPTransactionManager.updateState(SAPTransactionManager.java:2306)
	- locked <0x065ed98b> (a com.wm.adapter.sap.xtn.Transaction)
	at com.wm.adapter.sap.cci.BasicAdapterService.execute(BasicAdapterService.java:158)
	at com.wm.adk.cci.interaction.WmInteraction.execute(WmInteraction.java:76)
	at com.wm.pkg.art.ns.AdapterServiceNode.invokeService(AdapterServiceNode.java:396)
	at com.wm.pkg.art.ns.ARTNSService.baseInvoke(ARTNSService.java:62)
	at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:761)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.continueProcess(AbstractMonitorInvokeProcessor.java:356)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.processRuntime(AbstractMonitorInvokeProcessor.java:151)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.process(AbstractMonitorInvokeProcessor.java:171)
	at wm.bci.internal.BciServiceInvokeNotifier.process(BciServiceInvokeNotifier.java:53)
	at com.wm.ps.serviceMock.ServiceInterceptor.process(ServiceInterceptor.java:360)
	at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
	at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:67)
	at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
	at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
	at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
	at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
	at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
	at com.wm.app.b2b.server.invoke.ConcurrentRequestLimitProcessor.process(ConcurrentRequestLimitProcessor.java:57)
	at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:631)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:436)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:394)
	at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260)
	at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:236)
	at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:263)
	at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:662)
	at com.wm.lang.flow.FlowState.step(FlowState.java:527)
	at com.wm.lang.flow.FlowState.invoke(FlowState.java:494)
	at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1164)
	at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:761)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.continueProcess(AbstractMonitorInvokeProcessor.java:356)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.processRuntime(AbstractMonitorInvokeProcessor.java:151)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.process(AbstractMonitorInvokeProcessor.java:171)
	at wm.bci.internal.BciServiceInvokeNotifier.process(BciServiceInvokeNotifier.java:53)
	at com.wm.ps.serviceMock.ServiceInterceptor.process(ServiceInterceptor.java:360)
	at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
	at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:67)
	at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
	at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
	at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
	at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
	at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
	at com.wm.app.b2b.server.invoke.ConcurrentRequestLimitProcessor.process(ConcurrentRequestLimitProcessor.java:57)
	at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:631)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:436)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:394)
	at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260)
	at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:236)
	at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:263)
	at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:662)
	at com.wm.lang.flow.FlowState.step(FlowState.java:527)
	at com.wm.lang.flow.FlowState.invoke(FlowState.java:494)
	at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1164)
	at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:761)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.continueProcess(AbstractMonitorInvokeProcessor.java:356)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.processRuntime(AbstractMonitorInvokeProcessor.java:141)
	at fr.gifi.wm.monitor.manager.processor.AbstractMonitorInvokeProcessor.process(AbstractMonitorInvokeProcessor.java:171)
	at wm.bci.internal.BciServiceInvokeNotifier.process(BciServiceInvokeNotifier.java:53)
	at com.wm.ps.serviceMock.ServiceInterceptor.process(ServiceInterceptor.java:360)
	at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
	at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:67)
	at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
	at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
	at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
	at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
	at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
	at com.wm.app.b2b.server.invoke.ConcurrentRequestLimitProcessor.process(ConcurrentRequestLimitProcessor.java:57)
	at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:631)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:436)
	at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:352)
	at com.wm.app.b2b.server.jms.consumer.JMSTrigger.invokeService(JMSTrigger.java:1683)
	at com.wm.app.b2b.server.jms.consumer.JMSTrigger.processSingleMessage(JMSTrigger.java:1272)
	at com.wm.app.b2b.server.jms.consumer.JMSTrigger.processMessage(JMSTrigger.java:1238)
	at com.wm.app.b2b.server.jms.consumer.ExecutionTask.process(ExecutionTask.java:620)
	at com.wm.app.b2b.server.jms.consumer.ExecutionTask.processMessages(ExecutionTask.java:233)
	at com.wm.app.b2b.server.jms.consumer.ContinuousExecutionTask.processMessages(ContinuousExecutionTask.java:235)
	at com.wm.app.b2b.server.jms.consumer.ContinuousExecutionTask.run(ContinuousExecutionTask.java:68)
	at com.wm.util.pool.PooledThread.run(PooledThread.java:127)
	- locked <0x0ca9410e> (a com.wm.app.b2b.server.TMPooledThread)
	at java.base@11.0.18/java.lang.Thread.run(Thread.java:829)

Question related to a production (customer) instance

Where could the issue comes from ?
What should we do to improve integration time ?

1 Like

Hi Alexandre,

which JCo Version are you running on?

Did you try to let the WmSAP Adapter have the TIDs created and confirmed internally instead of explicitly calling createTID and confirmTID services?

Regards,
Holger

Hi Holger,

That is our JCo informations :

Name Value
JCo Version 3.1.8 (2023-07-11)
JCo Middleware JavaRfc
JCo Middleware Version 2.10.2
JCo Native Library Version 753.1216
JCo Native Library Location /opt/softwareag/IntegrationServer/lib/jars/custom/libsapjco3.so
IDoc Library Version 3.1.3 (2023-02-24)

By removing the invokes to createTID, OutboundProcess and confirmTID services, will it manage the TIDs internally ? Or, do we need to setup something else ?

Best regards,
Alexandre

Hi Alexandre,

you should update your JCo libs to latest version 3.1.9 plus 3.1.9 Hotfix 1.
IDocLib 3.1.3 is already the latest version.

Unfortunately, I am not able to check our source code how we handled this in the past as we have retired our project last year for other reasons.

You might want to check the SAP Adapter Installation and Users Guide if there is a chapter regarding this.

Regards,
Holger