siddhi icon indicating copy to clipboard operation
siddhi copied to clipboard

High CPU observed when running a test with 250 TPS

Open maneeshaheshan opened this issue 5 years ago • 1 comments

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

maneeshaheshan avatar Jul 09 '20 11:07 maneeshaheshan

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

dilini-muthumala avatar Aug 04 '20 13:08 dilini-muthumala