siddhi
siddhi copied to clipboard
High CPU observed when running a test with 250 TPS
When running a test with 250 TPS in the latest APIM-Analytics 2.6.0 distribution after April 4th, we could see high CPU occurrences.
The CPU went like 75%-85% during the time and average was around 45%,
Regards Maneesha
During the perf test, it was found that the file reading was consumin much of the CPU cycles.
"DataBridge-Core-pool-1-thread-8" #160 prio=5 os_prio=0 tid=0x00007f88e899f000 nid=0x67bc runnable [0x00007f8890ccc000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Curly.match1(Pattern.java:4302)
at java.util.regex.Pattern$Curly.match(Pattern.java:4238)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4660)
at java.util.regex.Pattern$Start.match(Pattern.java:3463)
at java.util.regex.Matcher.search(Matcher.java:1248)
at java.util.regex.Matcher.find(Matcher.java:637)
at java.util.regex.Matcher.replaceFirst(Matcher.java:1001)
at java.lang.String.replaceFirst(String.java:2178)
at org.wso2.carbon.config.provider.ConfigProviderImpl.processValue(ConfigProviderImpl.java:693)
at org.wso2.carbon.config.provider.ConfigProviderImpl.processPlaceholder(ConfigProviderImpl.java:656)
at org.wso2.carbon.config.provider.ConfigProviderImpl.getConfigurationObject(ConfigProviderImpl.java:120)
at org.wso2.carbon.stream.processor.common.utils.config.FileConfigManager.extractProperty(FileConfigManager.java:103)
at org.wso2.siddhi.core.executor.incremental.IncrementalAggregateBaseTimeFunctionExecutor.init(IncrementalAggregateBaseTimeFunctionExecutor.java:53)
at org.wso2.siddhi.core.executor.function.FunctionExecutor.initExecutor(FunctionExecutor.java:56)
at org.wso2.siddhi.core.executor.function.FunctionExecutor.cloneExecutor(FunctionExecutor.java:72)
at org.wso2.siddhi.core.util.ExpressionExecutorClonerUtil.lambda$getExpressionExecutorClones$0(ExpressionExecutorClonerUtil.java:34)
at org.wso2.siddhi.core.util.ExpressionExecutorClonerUtil$$Lambda$250/168715635.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at org.wso2.siddhi.core.util.ExpressionExecutorClonerUtil.getExpressionExecutorClones(ExpressionExecutorClonerUtil.java:35)
at org.wso2.siddhi.core.aggregation.BaseIncrementalValueStore.cloneStore(BaseIncrementalValueStore.java:110)
at org.wso2.siddhi.core.aggregation.IncrementalExecutor.lambda$processAggregates$0(IncrementalExecutor.java:189)
at org.wso2.siddhi.core.aggregation.IncrementalExecutor$$Lambda$265/1429324957.apply(Unknown Source)
at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
at org.wso2.siddhi.core.aggregation.IncrementalExecutor.processAggregates(IncrementalExecutor.java:188)
- locked <0x00000000c247d590> (a org.wso2.siddhi.core.aggregation.IncrementalExecutor)
at org.wso2.siddhi.core.aggregation.IncrementalExecutor.execute(IncrementalExecutor.java:137)
- locked <0x00000000c247d590> (a org.wso2.siddhi.core.aggregation.IncrementalExecutor)
at org.wso2.siddhi.core.aggregation.AggregationRuntime.processEvents(AggregationRuntime.java:470)
at org.wso2.siddhi.core.aggregation.IncrementalAggregationProcessor.process(IncrementalAggregationProcessor.java:92)
at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.processAndClear(ProcessStreamReceiver.java:186)
at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.process(ProcessStreamReceiver.java:96)
at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.receive(ProcessStreamReceiver.java:132)
at org.wso2.siddhi.core.stream.StreamJunction.sendEvent(StreamJunction.java:203)
at org.wso2.siddhi.core.stream.StreamJunction$Publisher.send(StreamJunction.java:413)
at org.wso2.siddhi.core.stream.input.InputDistributor.send(InputDistributor.java:34)
at org.wso2.siddhi.core.stream.input.InputEntryValve.send(InputEntryValve.java:44)
at org.wso2.siddhi.core.stream.input.InputHandler.send(InputHandler.java:73)
at org.wso2.siddhi.core.stream.input.source.PassThroughSourceHandler.sendEvent(PassThroughSourceHandler.java:35)
at org.wso2.siddhi.core.stream.input.source.InputEventHandler.sendEvent(InputEventHandler.java:80)
at org.wso2.siddhi.core.stream.input.source.PassThroughSourceMapper.mapAndProcess(PassThroughSourceMapper.java:66)
at org.wso2.siddhi.core.stream.input.source.SourceMapper.onEvent(SourceMapper.java:144)
at org.wso2.siddhi.core.stream.input.source.SourceMapper.onEvent(SourceMapper.java:114)
at org.wso2.siddhi.core.stream.input.source.InMemorySource$1.onMessage(InMemorySource.java:66)
at org.wso2.siddhi.core.util.transport.InMemoryBroker$MessageBroker.broadcast(InMemoryBroker.java:110)
at org.wso2.siddhi.core.util.transport.InMemoryBroker$MessageBroker.publish(InMemoryBroker.java:118)
at org.wso2.siddhi.core.util.transport.InMemoryBroker.publish(InMemoryBroker.java:41)
at org.wso2.siddhi.core.stream.output.sink.InMemorySink.publish(InMemorySink.java:96)
at org.wso2.siddhi.core.stream.output.sink.Sink.publish(Sink.java:148)
at org.wso2.siddhi.core.stream.output.sink.PassThroughSinkMapper.mapAndSend(PassThroughSinkMapper.java:74)
at org.wso2.siddhi.core.stream.output.sink.SinkMapper.mapAndSend(SinkMapper.java:165)
at org.wso2.siddhi.core.stream.output.sink.SinkCallback.receive(SinkCallback.java:54)
at org.wso2.siddhi.core.stream.output.StreamCallback.receive(StreamCallback.java:100)
at org.wso2.siddhi.core.stream.StreamJunction.sendEvent(StreamJunction.java:180)
at org.wso2.siddhi.core.stream.StreamJunction$Publisher.send(StreamJunction.java:404)
at org.wso2.siddhi.core.query.output.callback.InsertIntoStreamCallback.send(InsertIntoStreamCallback.java:56)
at org.wso2.siddhi.core.query.output.ratelimit.OutputRateLimiter.sendToCallBacks(OutputRateLimiter.java:96)
at org.wso2.siddhi.core.query.output.ratelimit.PassThroughOutputRateLimiter.process(PassThroughOutputRateLimiter.java:46)
at org.wso2.siddhi.core.query.selector.QuerySelector.process(QuerySelector.java:98)
at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.processAndClear(ProcessStreamReceiver.java:186)
at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.process(ProcessStreamReceiver.java:96)
at org.wso2.siddhi.core.query.input.ProcessStreamReceiver.receive(ProcessStreamReceiver.java:132)
at org.wso2.siddhi.core.stream.StreamJunction.sendEvent(StreamJunction.java:203)
at org.wso2.siddhi.core.stream.StreamJunction$Publisher.send(StreamJunction.java:413)
at org.wso2.siddhi.core.stream.input.InputDistributor.send(InputDistributor.java:34)
at org.wso2.siddhi.core.stream.input.InputEntryValve.send(InputEntryValve.java:44)
at org.wso2.siddhi.core.stream.input.InputHandler.send(InputHandler.java:73)
at org.wso2.siddhi.core.stream.input.source.PassThroughSourceHandler.sendEvent(PassThroughSourceHandler.java:35)
at org.wso2.siddhi.core.stream.input.source.InputEventHandler.sendEvent(InputEventHandler.java:80)
at org.wso2.extension.siddhi.map.wso2event.source.WSO2SourceMapper.mapAndProcess(WSO2SourceMapper.java:227)
at org.wso2.siddhi.core.stream.input.source.SourceMapper.onEvent(SourceMapper.java:144)
at org.wso2.siddhi.core.stream.input.source.SourceMapper.onEvent(SourceMapper.java:114)
at org.wso2.extension.siddhi.io.wso2event.source.AgentCallbackImpl.receive(AgentCallbackImpl.java:72)
at org.wso2.carbon.databridge.core.internal.queue.QueueWorker.run(QueueWorker.java:88)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
We have done performance improvements in the below commit: https://github.com/wso2/carbon-analytics/commit/f030aed19f3a1d9e801375a1de148d2f2e33b12d