Coder Social home page Coder Social logo

kornilova203 / flameviewer Goto Github PK

View Code? Open in Web Editor NEW
80.0 10.0 7.0 17.39 MB

Tool for flamegraphs visualization

License: MIT License

Java 14.62% CSS 5.61% HTML 3.09% JavaScript 26.66% Kotlin 48.17% Shell 0.05% Closure Templates 1.79%
profiler flamegraph intellij

flameviewer's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flameviewer's Issues

Uploading a jfr resulted in versionNotSupportedException

Hi Team,

While uploading a jfr generated from Zulu Openjdk in MacOS using chrome, we got the below listed exception
FlameViewer 1.0
com.oracle.jmc.flightrecorder.internal.VersionNotSupportedException
at com.oracle.jmc.flightrecorder.internal.FlightRecordingLoader.createChunkLoader(FlightRecordingLoader.java:223)
at com.oracle.jmc.flightrecorder.internal.FlightRecordingLoader.readChunks(FlightRecordingLoader.java:168)
at com.oracle.jmc.flightrecorder.internal.FlightRecordingLoader.loadStream(FlightRecordingLoader.java:51)
at com.oracle.jmc.flightrecorder.JfrLoaderToolkit.loadFile(JfrLoaderToolkit.java:24)
at com.oracle.jmc.flightrecorder.JfrLoaderToolkit.loadEvents(JfrLoaderToolkit.java:51)
at com.oracle.jmc.flightrecorder.JfrLoaderToolkit.loadEvents(JfrLoaderToolkit.java:38)
at com.github.kornilova_l.flight_parser.FlightParser.(FlightParser.java:33)
at com.github.kornilova203.flameviewer.converters.cflamegraph.JfrToStacksConverter.convert(JfrToStacksConverter.java:22)
at com.github.kornilova203.flameviewer.converters.cflamegraph.JfrToCFlamegraphConverterFactoryCli$create$1.convert(JfrToCFlamegraphConverterFactoryCli.kt:14)
at com.github.kornilova203.flameviewer.converters.cflamegraph.JfrToCFlamegraphConverterFactoryCli$create$1.convert(JfrToCFlamegraphConverterFactoryCli.kt:9)
at com.github.kornilova203.flameviewer.converters.calltraces.ToCallTracesConverterFactoryCli$create$1.convert(ToCallTracesConverterFactoryCli.kt:25)
at com.github.kornilova203.flameviewer.converters.calltraces.ToCallTracesConverterFactoryCli$create$1.convert(ToCallTracesConverterFactoryCli.kt:11)
at com.github.kornilova203.flameviewer.converters.trees.ToTreesSetConverterFactory$create$2.convert(ToTreesSetConverterFactory.kt:19)
at com.github.kornilova203.flameviewer.converters.trees.ToTreesSetConverterFactory$create$2.convert(ToTreesSetConverterFactory.kt:10)
at com.github.kornilova203.flameviewer.server.TreeManager.updateTreesSet(TreeManager.kt:30)
at com.github.kornilova203.flameviewer.server.TreeManager.getTree(TreeManager.kt:36)

Possible to display time in flame graph?

Is there a concept of time (relative or absolute) available to display in the Call Traces or Back Traces?

Right now I'm going off of relative stack widths to find slow code to optimize. However, when I fix one slow section of code, it's hard to get a picture of how much time was saved.

Make FlameViewer a standalone tool

  • Move Fierix to a separate project
  • Startup FlameViewer from command line with a path to file (one FlameViewer instance per file)
  • FlameViewer in plugin must not lose uploaded files. It should keep files storage and convert files to cflamegraph

Exception occurred when all of profile target setting to * (class, method, parameter)

@kornilova-l If configured all of include setting's value is * exception occurred and process to suspended. (cannot terminate so only possible by kill -3)
I didn't saw before this kind of error.
This exception threw during execute JUnit test.

Output file: /Users/sam/Library/Caches/IntelliJIdea2017.3/flamegraph-profiler/log/com.jennifersoft.aries.pom/ActiveServiceOriginCountMetricsCollectorSpec-2018-03-13-16_46_35.ser
Configuration:
Including patterns:
.(*)Exception in thread "logging thread" java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "com/github/kornilova_l/libs/com/google/protobuf/InvalidProtocolBufferException"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.github.kornilova_l.flamegraph.javaagent.logger.event_data_storage.MethodEventData.getEvents(MethodEventData.java:63)
at com.github.kornilova_l.flamegraph.javaagent.logger.Logger.logEvents(Logger.java:84)
at com.github.kornilova_l.flamegraph.javaagent.logger.Logger.run(Logger.java:62)
at java.lang.Thread.run(Thread.java:748)

I add exclude setting all of your plugin classes to prevent duplicated loading.
-> class = com.github.kornilova* method = * parameter = *
At the result, everything is ok.

I recommend to list up all classes of your plugin and prevent to visit.

Yourkit csv file is unsupported

Following exception can be fixed by ignoring 0 width nodes.

java.lang.IllegalArgumentException: Please open an issue at https://github.com/kornilova-l/flamegraph-visualizer/issues with this stack trace.: node width must be bigger than 0.
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_call_traces.cflamegraph.Converter.validateNode(Converter.kt:74)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_call_traces.cflamegraph.Converter.processNode(Converter.kt:53)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_call_traces.cflamegraph.Converter.<init>(Converter.kt:33)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_call_traces.cflamegraph.CompressedFlamegraphToCallTracesConverter.convert(CompressedFlamegraphToCallTracesConverter.kt:68)

File is unsupported is shown when parser finds unexpected line:

"[JSP/Servlet] /hdf5rest/write-vns","52552","21"

Check what lines may be included in a yourkit csv file.

No call was registered or all methods took <1ms

What should I try when all results I ever get are "No call was registered or all methods took <1ms" instead of a flame graph?

This is the beginning of the log output in the IJ console:

"C:\Program Files (x86)\JWS\JavaSoft\JRE\jre1.8.0_131\bin\java" -Djava.library.path=C:\System9\KWS\lib\dll -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -ea -Ddefaultprinter=PDFCreator -Ddefaultserver=PROD_S9 -Dhttps.protocols=TLSv1,SSLv2Hello -Dicon=/uz/s9client/kws/images/kws_dyn.gif -Dlocal_actions=sourcesEJB\uz\s9server\services\toegang\driver -Dlocal_settings=sourcesEJB\uz\s9server\services\toegang\driver -Dlog4j.configuration=uz/s9/kws/log4j.properties -Dmultidesktop.create.default.on.primary.screen=true -Drebel.packages=uz -DS9QueryLogic.debug.logNonUZCode=true -DS9QueryLogic.debug.multiline=true -DS9QueryLogic.debug.nbStackInfo=10,10 -DS9QueryLogic.debug.outOfOrder=true -DS9QueryLogic.debug.suppressGetAttributes=false -DS9QueryLogic.debug.threadinfo=true -DS9QueryLogic.debug=true "-Dtitle=Dynamisch KWS (preprod lokaal) (jre8) (MultiDesktop)" -Dwlpreprod=true -DJINTEGRA_NATIVE_MODE=true -Dsun.java2d.noddraw=true "-javaagent:C:\uz\Settings\IntelliJIdea\config\plugins\FlamegraphProfiler\classes\javaagent.jar=C:\uz\Settings\IntelliJIdea\system\flamegraph-profiler\log\KWS\KWS preprod local 8 MultiDesktop-2018-01-22-15_21_52.ser&C:\uz\Settings\IntelliJIdea\system\flamegraph-profiler\configuration\KWS.config" -javaagent:C:\uz\ProgramFiles\IntelliJIDEA2017.3EAP\lib\idea_rt.jar=64468:C:\uz\ProgramFiles\IntelliJIDEA2017.3EAP\bin -Dfile.encoding=windows-1252 -classpath C:\Users\jbecke4\AppData\Local\Temp\classpath1.jar uz.s9client.kws.Kws
Output file: C:\uz\Settings\IntelliJIdea\system\flamegraph-profiler\log\KWS\KWS preprod local 8 MultiDesktop-2018-01-22-15_21_52.ser
Configuration:
Including patterns:
.(*+)+

Can I find/add any other debug log info?

Use FlatBuffers for cflamegraph files

Snapshot version of plugin implements compressed version of flamegraph format.
But the new format is not binary therefore it is not optimal for saving disk space.
Also custom parser is implemented for the format and it is bug prone.

I suggest keeping structure of cflamegraph files but using FlatBuffers for serialization.

cflamegraph format will contain the same amount of information as regular flamegraph, therefore it will not be possible to directly use it for client-server communication #15, but it can be easily converted to more complex data.

I considered making cflamegraph format to be also client-server format, but then it would contain redundant information (that is set to speed up visualization) also client-server format may be changed and I do not want to worry about support for existing files.

kotlin.KotlinNullPointerException

	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_call_tree.fierix.FierixToCallTreeConverter.convert(FierixToCallTreeConverter.kt:18)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_call_tree.FileToCallTreeConverter$Companion.convert(FileToCallTreeConverter.kt:18)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreeManager.updateTreesSet(TreeManager.kt:66)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreeManager.getCallTreesPreview(TreeManager.kt:133)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.trees.TreesPreviewHandler.doProcess(TreesPreviewHandler.kt:14)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.RequestHandler.process(RequestHandler.kt:23)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.processGetMethod(ProfilerHttpRequestHandler.java:306)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.process(ProfilerHttpRequestHandler.java:272)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$1.invoke(DelegatingHttpRequestHandler.kt:27)
	at org.jetbrains.io.DelegatingHttpRequestHandler.process(DelegatingHttpRequestHandler.kt:42)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:15)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:11)
	at org.jetbrains.io.SimpleChannelInboundHandlerAdapter.channelRead0(SimpleChannelInboundHandlerAdapter.java:20)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at io.netty.handler.codec.http.cors.CorsHandler.channelRead(CorsHandler.java:95)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:323)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:297)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at org.jetbrains.io.PortUnificationServerHandler.decode(PortUnificationServerHandler.java:133)
	at org.jetbrains.io.PortUnificationServerHandler.messageReceived(PortUnificationServerHandler.java:80)
	at org.jetbrains.io.Decoder.channelRead(Decoder.java:38)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:677)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:612)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:529)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:491)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905)
	at java.base/java.lang.Thread.run(Unknown Source)```

Methods count is not 0, but visualizer says no call data

The console output when I run:

Output file: /Users/sbaker/Library/Caches/IntelliJIdea2018.1/flamegraph-profiler/log/take6/ImageServiceTest.removeMetadataFromJpegPhotoTest (1)-2018-04-27-13_06_21.ser
Configuration:
Including patterns: 
	com.raveu.utility.*.*(*+)
	javax.imageio.*(*+)
	com.drew.*.*(*+)Methods count: 34

However, when I open results I always see:
Call tree is unavailable for this file

The ser file created is about 2MB.

NullPointerException

macOS 10.15.3
IntelliJ Community 2019.3.3 running on Java 11
FlameViewer 0.8.1

java.lang.NullPointerException
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_file.jmc.FlightRecorderConverter.removePackageInParameters(FlightRecorderConverter.java:32)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_file.jmc.FlightRecorderConverter.<init>(FlightRecorderConverter.java:18)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_file.jmc.JMCConverter.convert(JMCConverter.java:44)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_file.ProfilerToFlamegraphConverter$Companion.convert(ProfilerToFlamegraphConverter.kt:46)
	at com.github.kornilova_l.flamegraph.plugin.server.converters.file_to_file.FlamegraphFileSaver.tryToConvert(ProfilerToFlamegraphConverter.kt:14)
	at com.github.kornilova_l.flamegraph.plugin.server.FileUploader.tryToConvertFileToAnotherFile(FileUploader.kt:53)
	at com.github.kornilova_l.flamegraph.plugin.server.FileUploader.upload(FileUploader.kt:37)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.uploadFile(ProfilerHttpRequestHandler.java:234)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.processPostMethod(ProfilerHttpRequestHandler.java:192)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.process(ProfilerHttpRequestHandler.java:270)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$1.invoke(DelegatingHttpRequestHandler.kt:20)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$2.test(DelegatingHttpRequestHandler.kt:34)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$2.test(DelegatingHttpRequestHandler.kt:15)
	at com.intellij.openapi.extensions.impl.ExtensionProcessingHelper.lambda$findFirstSafe$0(ExtensionProcessingHelper.java:34)
	at com.intellij.openapi.extensions.impl.ExtensionProcessingHelper.computeSafeIfAny(ExtensionProcessingHelper.java:45)
	at com.intellij.openapi.extensions.impl.ExtensionProcessingHelper.findFirstSafe(ExtensionProcessingHelper.java:34)
	at com.intellij.openapi.extensions.ExtensionPointName.findFirstSafe(ExtensionPointName.java:55)
	at org.jetbrains.io.DelegatingHttpRequestHandler.process(DelegatingHttpRequestHandler.kt:33)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:15)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:11)
	at org.jetbrains.io.SimpleChannelInboundHandlerAdapter.channelRead0(SimpleChannelInboundHandlerAdapter.java:21)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
	at io.netty.handler.codec.http.cors.CorsHandler.channelRead(CorsHandler.java:95)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:328)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:302)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
	at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:834)

v0.81 doesn't work with CLion 2018.2.4

idea.log
After installing the plugin on CLion and restarting, I do see this option: Tools->Open Flameviewer. However, clicking on it doesn't open any GUI to upload the profiler file. PFA the logs from CLion

Filter multiple packages?

Is it possible to filter multiple packages at the same time?
It looks like the filtering is handled in Filter.kt, using Regex behind the scenes. Looks like adding a bar ('|') between packages works, but I wanted to make sure this is the correct way to filter.

image

If this is correct, would a note on this in the README be accepted if I submit a PR with an example?

This is a wonderfully powerful tool. Thank you for writing this excellent piece of software!

Bug for IDEA Flamegraph Profiler plugin

Fatal Error 1:

-1
java.lang.ArrayIndexOutOfBoundsException: -1
	at java.util.ArrayList.elementData(ArrayList.java:418)
	at java.util.ArrayList.get(ArrayList.java:431)
	at com.github.kornilova_l.libs.com.google.protobuf.RepeatedFieldBuilderV3.getBuilder(RepeatedFieldBuilderV3.java:247)
	at com.github.kornilova_l.flamegraph.proto.TreeProtos$Tree$Node$Builder.getNodesBuilder(TreeProtos.java:2975)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreesSet.setTreeWidth(TreesSet.java:71)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.flamegraph_format_trees.StacksOCTreeBuilder.buildTree(StacksOCTreeBuilder.java:26)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.flamegraph_format_trees.SimpleStacksOCTreeBuilder.<init>(SimpleStacksOCTreeBuilder.java:25)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.flamegraph_format_trees.StacksOCTreeBuilder.<init>(StacksOCTreeBuilder.java:18)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.flamegraph_format_trees.FlamegraphFormatTreesSet.<init>(FlamegraphFormatTreesSet.java:30)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreeManager.updateTreesSet(TreeManager.java:86)
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreeManager.getTree(TreeManager.java:94)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.AccumulativeTreeRequestHandler.getFilteredTree(AccumulativeTreeRequestHandler.java:44)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.AccumulativeTreeRequestHandler.doActualProcess(AccumulativeTreeRequestHandler.java:28)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.TreeRequestHandler.process(TreeRequestHandler.java:35)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.processGetMethod(ProfilerHttpRequestHandler.java:300)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.process(ProfilerHttpRequestHandler.java:265)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$1.invoke(DelegatingHttpRequestHandler.kt:42)
	at org.jetbrains.io.DelegatingHttpRequestHandler.process(DelegatingHttpRequestHandler.kt:57)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:29)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:25)
	at org.jetbrains.io.SimpleChannelInboundHandlerAdapter.channelRead0(SimpleChannelInboundHandlerAdapter.java:20)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.http.cors.CorsHandler.channelRead(CorsHandler.java:72)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
	at java.lang.Thread.run(Thread.java:745)

Fatal Error 2:

null
java.lang.NullPointerException
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreeManager.getTree(TreeManager.java:95)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.AccumulativeTreeRequestHandler.getFilteredTree(AccumulativeTreeRequestHandler.java:44)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.AccumulativeTreeRequestHandler.doActualProcess(AccumulativeTreeRequestHandler.java:28)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.TreeRequestHandler.process(TreeRequestHandler.java:35)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.processGetMethod(ProfilerHttpRequestHandler.java:303)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.process(ProfilerHttpRequestHandler.java:265)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$1.invoke(DelegatingHttpRequestHandler.kt:42)
	at org.jetbrains.io.DelegatingHttpRequestHandler.process(DelegatingHttpRequestHandler.kt:57)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:29)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:25)
	at org.jetbrains.io.SimpleChannelInboundHandlerAdapter.channelRead0(SimpleChannelInboundHandlerAdapter.java:20)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.http.cors.CorsHandler.channelRead(CorsHandler.java:72)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
	at java.lang.Thread.run(Thread.java:745)

Fatal Error 3:

null
java.lang.NullPointerException
	at com.github.kornilova_l.flamegraph.plugin.server.trees.TreeManager.getHotSpots(TreeManager.java:121)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.HotSpotsRequestHandler.doActualProcess(HotSpotsRequestHandler.java:27)
	at com.github.kornilova_l.flamegraph.plugin.server.tree_request_handlers.TreeRequestHandler.process(TreeRequestHandler.java:35)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.processGetMethod(ProfilerHttpRequestHandler.java:291)
	at com.github.kornilova_l.flamegraph.plugin.server.ProfilerHttpRequestHandler.process(ProfilerHttpRequestHandler.java:265)
	at org.jetbrains.io.DelegatingHttpRequestHandler$process$1.invoke(DelegatingHttpRequestHandler.kt:42)
	at org.jetbrains.io.DelegatingHttpRequestHandler.process(DelegatingHttpRequestHandler.kt:57)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:29)
	at org.jetbrains.io.DelegatingHttpRequestHandlerBase.messageReceived(DelegatingHttpRequestHandlerBase.kt:25)
	at org.jetbrains.io.SimpleChannelInboundHandlerAdapter.channelRead0(SimpleChannelInboundHandlerAdapter.java:20)
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.http.cors.CorsHandler.channelRead(CorsHandler.java:72)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
	at java.lang.Thread.run(Thread.java:745)

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.