Giter Site home page Giter Site logo

jifa's People

Contributors

d-d-h avatar dependabot[bot] avatar ex34toway avatar farnulfo avatar jasonk000 avatar jdpgrailsdev avatar joeyleeeeeee97 avatar juergenkoras avatar jutzig avatar leveretconey avatar neason-cn avatar sam-ma avatar tokuhirom avatar vivekko avatar y1yang0 avatar yangdaotan avatar ygjia avatar

Stargazers

 avatar  avatar

Forkers

jkoras

jifa's Issues

Add highlight effect to blocked threads graph

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.

Thread states in thread overview should be clickable

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.

ThreadDumpCompare throws exception on first access

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]

Blocked Threads visualization

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

Too restrictive size limits

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]

Search for ThreadDumps

Would be good to have a search function to filter thread dumps. Should have

  • search options (regex, case sensitive,...)
  • thread content
  • search hit highlighting
  • multi-file support

Ability to compare multiple thread dumps

It would be useful to have a compare view between several thread dumps. Should contain at least

  • a link to the individual dumps
  • a comparison of the thread states between the dumps
  • a comparison of the largest thread groups between dumps

ThreadDumpAnalyzer should have a diagnoser

Similar to the GC analyzer, it would be helpful if the ThreadDumpAnalyzer could list common problems like:

  • too many threads
  • too large stacksize
  • high CPU burning rates
  • deadlocks
  • blocked threads

Allow GC log rotations

A GC log can be comprised of several log rotations. The GC anaylsis should ideally allow for a compressed upload containing several log rotations

Allow uploading several threaddumps at once

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:

  • show an overview that compares the thread dumps regarding
  • amount of threads and their states
  • high CPU usage of specific threads between all samples
  • threads that haven't moved between samples
  • additional tabs (or similar) to switch to the individual thread dump for detailed analyis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.