Diagnosing Cause of High CPU Usage

I am trying to figure out why our CPU usage spiked high and was not able to come down all day. Looking at the threads it appears that most of the usage is associated with WebAPI. But I'm not quite sure what that is referring to exactly in the process. Nobody was in the gateway or pushed any changes at the 9:30 mark today. I'm a bit stumped on what to look for to track this down.


Here is a sample of the information for the task taking up 6% of the useage
Thread [webserver-969556] id=969556, (RUNNABLE)
java.base@11.0.15/java.lang.Integer.valueOf(Unknown Source)
com.inductiveautomation.gateway.tags.history.query.DatasourceQueryExecutor.getValueFromRS(DatasourceQueryExecutor.java:620)
com.inductiveautomation.gateway.tags.history.query.DatasourceQueryExecutor.readSingle(DatasourceQueryExecutor.java:1080)
com.inductiveautomation.gateway.tags.history.query.DatasourceQueryExecutor.readNextFromSource(DatasourceQueryExecutor.java:1009)
com.inductiveautomation.gateway.tags.history.query.DatasourceQueryExecutor.readNextFromSource(DatasourceQueryExecutor.java:93)
app//com.inductiveautomation.ignition.gateway.sqltags.history.query.AbstractHistoryLoader.readNext(AbstractHistoryLoader.java:179)
app//com.inductiveautomation.ignition.gateway.sqltags.history.query.AbstractHistoryLoader.processData(AbstractHistoryLoader.java:161)
app//com.inductiveautomation.ignition.gateway.sqltags.history.query.AggregateHistoryQueryExecutor.processData(AggregateHistoryQueryExecutor.java:107)
app//com.inductiveautomation.ignition.gateway.sqltags.history.query.HistoryWriter.readData(HistoryWriter.java:319)
app//com.inductiveautomation.ignition.gateway.sqltags.history.query.HistoryWriter.execute(HistoryWriter.java:232)
app//com.inductiveautomation.ignition.gateway.sqltags.history.TagHistoryManagerImpl.queryHistory(TagHistoryManagerImpl.java:570)
app//com.inductiveautomation.ignition.gateway.tags.model.ProjectDefaultTagManagerFacade.queryHistory(ProjectDefaultTagManagerFacade.java:440)
com.inductiveautomation.perspective.gateway.components.PowerChartModelDelegate$TagHistoryFetch.fetch(PowerChartModelDelegate.java:237)
com.inductiveautomation.perspective.gateway.comm.FetchableCacheImpl.lambda$fetch$0(FetchableCacheImpl.java:47)
com.inductiveautomation.perspective.gateway.comm.FetchableCacheImpl$$Lambda$5028/0x0000029e06258cb0.run(Unknown Source)
com.inductiveautomation.perspective.gateway.threading.BlockingWork.invokeBlockingTask(BlockingWork.java:34)
com.inductiveautomation.perspective.gateway.comm.FetchableCacheImpl.fetch(FetchableCacheImpl.java:47)
com.inductiveautomation.perspective.gateway.comm.Routes.handleFetch(Routes.java:2233)
com.inductiveautomation.perspective.gateway.comm.Routes$$Lambda$3247/0x00000295ec3ab858.handle(Unknown Source)
app//com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:254)
app//com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:61)
app//com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:59)
app//com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:38)
app//javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
app//org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
app//org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
app//org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)
app//org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
app//org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
app//org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
app//org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
app//org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
app//org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
app//org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
app//org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
app//org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
app//org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
app//org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
app//org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
app//org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
app//org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
app//org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
app//com.inductiveautomation.catapult.handlers.RemoteHostNameLookupHandler.handle(RemoteHostNameLookupHandler.java:121)
app//org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
app//org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
app//org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
app//org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
app//org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
app//org.eclipse.jetty.server.Server.handle(Server.java:516)
app//org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
app//org.eclipse.jetty.server.HttpChannel$$Lambda$568/0x00000295d710b040.dispatch(Unknown Source)
app//org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
app//org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
app//org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
app//org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
app//org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555)
app//org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410)
app//org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164)
app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
app//org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
app//org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
java.base@11.0.15/java.lang.Thread.run(Unknown Source)

I'm going to guess a user was requesting large history time spans for a PowerChart.

2 Likes