jutzig / jifa Goto Github PK
View Code? Open in Web Editor NEWThis project forked from eclipse/jifa
Eclipse Jifa
License: Eclipse Public License 2.0
This project forked from eclipse/jifa
Eclipse Jifa
License: Eclipse Public License 2.0
Threaddumps and GC logs can be rather large. Would be good to allow compressed uploads (zip files)
It's not immediately clear to the user, that they can click on the nodes in the blocked threads graph to see the trace of the thread.
To give a visual clue, there should be hover/highlight effect to indicate that it's interactive.
The doughnut charts in the thread state overview would be more helpful if they were clickable. When clicking on e.g. the 'Runnable' threads, the threads table should show and allow expanding/filtering the threads in that state.
It helps to know which threads are CPU hogs
StackTrace below:
worker_1 | 2023-08-14 10:02:19.256 [vert.x-worker-thread-22] [WARN] Parse pid failed: 2023-08-10 14:50:40 master_1 | 2023-08-14 10:02:19.267 [vert.x-eventloop-thread-6] [ERROR] Handle http request failed master_1 | io.vertx.serviceproxy.ServiceException: Duplicate entry 'THREAD_DUMP_ANALYSIS-12345-1692007284206-AEPEDS2_dump01.txt' for key 'uk_type_and_target' master_1 | at io.vertx.serviceproxy.HelperUtils.manageFailure(HelperUtils.java:110) ~[vertx-service-proxy-4.1.2.jar:4.1.2] master_1 | at org.eclipse.jifa.master.service.JobServiceVertxProxyHandler.lambda$handle$3(JobServiceVertxProxyHandler.java:158) ~[master-0.2.0-SNAPSHOT.jar:?] master_1 | at io.vertx.reactivex.SingleHelper$1.onError(SingleHelper.java:69) ~[vertx-rx-java2-gen-4.1.2.jar:4.1.2] master_1 | at io.reactivex.internal.observers.ResumeSingleObserver.onError(ResumeSingleObserver.java:51) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onError(SingleFlatMap.java:90) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver.onError(SingleFlatMap.java:116) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.single.SingleDoFinally$DoFinallyObserver.onError(SingleDoFinally.java:79) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback.onError(SingleFlatMap.java:90) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.observers.ResumeSingleObserver.onError(ResumeSingleObserver.java:51) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.observers.ResumeSingleObserver.onError(ResumeSingleObserver.java:51) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.disposables.EmptyDisposable.error(EmptyDisposable.java:78) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.single.SingleError.subscribeActual(SingleError.java:42) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.Single.subscribe(Single.java:3666) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.single.SingleDelayWithCompletable$OtherObserver.onComplete(SingleDelayWithCompletable.java:69) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.completable.CompletableAndThenCompletable$NextObserver.onComplete(CompletableAndThenCompletable.java:99) ~[rxjava-2.2.21.jar:?] master_1 | at io.reactivex.internal.operators.completable.CompletableOnErrorComplete$OnError.onComplete(CompletableOnErrorComplete.java:48) ~[rxjava-2.2.21.jar:?] master_1 | at io.vertx.reactivex.impl.AsyncResultCompletable.lambda$subscribeActual$0(AsyncResultCompletable.java:48) ~[vertx-rx-java2-gen-4.1.2.jar:4.1.2] master_1 | at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:124) ~[vertx-core-4.1.2.jar:4.1.2] master_1 | at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54) ~[vertx-core-4.1.2.jar:4.1.2] master_1 | at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [netty-common-4.1.65.Final.jar:4.1.65.Final] master_1 | at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) [netty-common-4.1.65.Final.jar:4.1.65.Final] master_1 | at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [netty-transport-4.1.65.Final.jar:4.1.65.Final]
It would be useful to render the threads that are blocked in a chart.
It should be possible to click on a thread to see its trace.
The visualization should make it easier to understand which threads are blocking other threads
Depending on the version of jcmd, thread dumps can start with
:
If the dump starts like that, the parser exits with no results.
When uploading a larger gc log, we're seeing these exceptions often:
2023-08-03 12:56:03.546 [vert.x-eventloop-thread-1] [INFO] RoutingContext failure (400) java.io.IOException: Size exceed allowed maximum capacity at io.netty.handler.codec.http.multipart.AbstractHttpData.checkSize(AbstractHttpData.java:71) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.MemoryAttribute.addContent(MemoryAttribute.java:83) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.HttpPostStandardRequestDecoder.setFinalBuffer(HttpPostStandardRequestDecoder.java:641) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.HttpPostStandardRequestDecoder.parseBodyAttributes(HttpPostStandardRequestDecoder.java:566) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.HttpPostStandardRequestDecoder.parseBody(HttpPostStandardRequestDecoder.java:380) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.HttpPostStandardRequestDecoder.offer(HttpPostStandardRequestDecoder.java:299) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.HttpPostStandardRequestDecoder.offer(HttpPostStandardRequestDecoder.java:49) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.offer(HttpPostRequestDecoder.java:223) ~[netty-codec-http-4.1.65.Final.jar:4.1.65.Final] at io.vertx.core.http.impl.Http1xServerRequest.onData(Http1xServerRequest.java:522) ~[vertx-core-4.1.2.jar:4.1.2] at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:70) ~[vertx-core-4.1.2.jar:4.1.2] at io.vertx.core.impl.DuplicatedContext.execute(DuplicatedContext.java:162) ~[vertx-core-4.1.2.jar:4.1.2] at io.vertx.core.http.impl.Http1xServerRequest.handleContent(Http1xServerRequest.java:146) ~[vertx-core-4.1.2.jar:4.1.2]
Would be good to have a search function to filter thread dumps. Should have
It would be useful to have a compare view between several thread dumps. Should contain at least
Similar to the GC analyzer, it would be helpful if the ThreadDumpAnalyzer could list common problems like:
A GC log can be comprised of several log rotations. The GC anaylsis should ideally allow for a compressed upload containing several log rotations
To diagnose an issue, one often needs more then one threaddump sample.
So typically one would take e.g. 3 thread dumps with a few seconds pause between each. Jifa should be able to analyze several samples with a zipped upload to provide new insights. Specifically this would allow to:
The page can get quite large. Would be helpful to have a navbar to jump to the sections
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.