Visualise Go program GC trace data in real time


This project is no longer maintained

I'm sorry but I do not have the bandwidth to maintain this tool. Please do not send issues or PRs. Thank you.


gcvis

Visualise Go program gctrace data in real time

Note: GC timing graphs are only supported for go 1.6

Usage

Running it directly:

env GOMAXPROCS=4 gcvis godoc -index -http=:6060

Adding the gctrace flag yourself:

GODEBUG=gctrace=1 godoc -index -http=:6060 2>&1 | gcvis

Or from a log file:

GODEBUG=gctrace=1 godoc -index -http=:6060 2> stderr.log
cat stderr.log | gcvis

Starting the server without automatically opening a browser:

gcvis -o=false godoc -index -http=:6060
Comments
  • Go 1.5 support + Refactor

    Go 1.5 support + Refactor

    I fixed the regexp for Go 1.5 as explained on https://golang.org/pkg/runtime/

    Currently, it is: gc # @#s #%: #+...+# ms clock, #+...+# ms cpu, #->#-># MB, # MB goal, # P

    I ended up also adding tests and fixing a few things:

    • It was parsing Stderr and printing on Stdout (via Println). It now always write to Stderr.
    • I added a flag to be able to set a fixed port.
  • Fix break in main loop

    Fix break in main loop

    When the parser signals that it is done, the main loop wants to exit, but the break for the for loop was only breaking the select case and not the loop.

    Before this patch, if the input was closed (for example when we pipe into gcvis and the process on the left was done) gcvis would always go into the done case, just break the case and then continue to the next iteration of the loop, which would again choose the done case and continue like this forever, eating up a single CPU core (effectively busy looping).

    Fix this by replacing the break with os.Exit(0).

  • Add timings

    Add timings

    I wanted to get insights in the GC timings so I extended gcvis to also parse out the timing measurements and show them. note: i just modified the regex for go 1.5, but only tested it with 1.6, not sure if these versions use an identical format? screenshots (note: program instrumented had very few scavenger runs) BEFORE: old AFTER: new

  • Refactor

    Refactor

    So I was looking at gcvis and noticed that it didn't work with my app... So I dug into it and found out that when I use goroutines it would show nothing.

    I ended up noticing a previous PR https://github.com/davecheney/gcvis/pull/9 on your repository but which was causing previous output to not be parsed anymore. At this point, I decided to just add tests on the project (at least on the Parser part).

    I couldn't help but also refactor the whole main.go file to make a bit more sense of it and get to write only tests on the Parser part.

    A bit of cleanup is still necessary IMO, but I'll get to that later. Would you be okay to review/merge this PR?

  • Fix template import

    Fix template import

    The javascript is currently broken.

    This one is on me :disappointed:. When I refactored I was still running the old gcvis executable in my GOPATH. Turns out goimports added this dependency thinking it was a text/template when in fact we used html/template before.

    Sorry about that. I wish I could have a bit of time to add tests around the http server but that'll have to wait a bit.

  • Use regexp to match stdout instead of fmt.Sscanf

    Use regexp to match stdout instead of fmt.Sscanf

    This allows us to match on goroutines conditionally and still support go versions inferior to 1.4.

    If you could review/merge this one, then I could rebase my other PR on top of master to fix the timeout issue everywhere.

    Cheers.

  • Stdin support

    Stdin support

    Work in progress.

    This PR introduces the possibility of running gcvis with the content of Stdin.

    @davecheney if you have any advice on adding integration tests on the CLI, I'm all ears :smile:.

  • Fix timeout issue

    Fix timeout issue

    timeoutAfter would make other tests cases fail if they took more than the duration passed in parameter. Each test now creates its own timeout channel, avoiding shared state between tests.

    @davecheney You told me to add the timeout in runParserWith but I feel that placing it in timeoutAfter makes more sense.

  • gcvis/main.go

    gcvis/main.go

    Issue: When using pipe call scheme (not a subcommand one), title of the page was not being set properly (it was rendered as gcvis -)

    Here I suggest setting it to iface:port in such cases (eg. for localhost:6060 the page title would render as gcvis - localhost:6060)

  • Add accumulated totals, the lazy way

    Add accumulated totals, the lazy way

    I wanted to see accumulated totals. This isn't ideal from a memory POV, but it got me the data I needed.

    Also refactored the JS a bit, seems to work.

  • Containerize the runtime events in a ring buffer.

    Containerize the runtime events in a ring buffer.

    To enable someone to use this tool to observe event streams over sliding windows of sample recency as well as prevent unbound growth of observations, the list of observations has been wrapped in a ring buffer of flag-specifiable size. This has been a tremendous help in visualizing events from particularly garbage collector-active servers.

  • Allow the ability to save the graph.

    Allow the ability to save the graph.

    This is a PR to fix #1, there are some limitations outlined bellow and I'll see if I can fix the transparent image later on.

    Limitations: Currently FF saves with incorrect image extension and the background of the image is transparent (will fix later).

Example of trace instrumentation in Golang applications :bar_chart:
Example of trace instrumentation in Golang applications :bar_chart:

go-opentelemetry-example Example of trace instrumentation in Golang applications using the opentelemetry. Requirements/dependencies Docker Docker-comp

Jun 4, 2022
Tracetest - Trace-based testing. End-to-end tests powered by your OpenTelemetry Traces.
Tracetest - Trace-based testing. End-to-end tests powered by your OpenTelemetry Traces.

End-to-end tests powered by OpenTelemetry. For QA, Dev, & Ops. Live Demo | Documentation | Twitter | Discord | Blog Click on the image or this link to

Jan 3, 2023
gosivy - Real-time visualization tool for Go process metrics
 gosivy - Real-time visualization tool for Go process metrics

Gosivy tracks Go process's metrics and plot their evolution over time right into your terminal, no matter where it's running on. It helps you understand how your application consumes the resources.

Nov 27, 2022
Feb 9, 2022
Open source framework for processing, monitoring, and alerting on time series data

Kapacitor Open source framework for processing, monitoring, and alerting on time series data Installation Kapacitor has two binaries: kapacitor – a CL

Dec 26, 2022
Rdebug — Real Debugger
Rdebug — Real Debugger

RDebug - Real Debugger Translation 中文 1. Introduction Rdebug is an open source tool chain that focusing on efficiency of daily developing, testing and

Dec 23, 2022
Hard Drive S.M.A.R.T Monitoring, Historical Trends & Real World Failure Thresholds
Hard Drive S.M.A.R.T Monitoring, Historical Trends & Real World Failure Thresholds

Hard Drive S.M.A.R.T Monitoring, Historical Trends & Real World Failure Thresholds

Jan 1, 2023
Log-generator - A simple CLI tool that generates near real logs for testing

Log-generator - A simple CLI tool that generates near real logs for testing

Jan 22, 2022
Library and program to parse and forward HAProxy logs

haminer Library and program to parse and forward HAProxy logs. Supported forwarder, Influxdb Requirements Go for building from source code git for dow

Aug 17, 2022
Continuous profiling of golang program based on pprof
Continuous profiling of golang program based on pprof

基于 pprof 的 Golang 程序连续分析 Demo 点击 point Quick Start 需要被收集分析的golang程序,需要提供net/http/pprof端点,并配置在collector.yaml配置文件中 #run server :8080 go run ser

Jan 9, 2023
Logger - Go language is interface-oriented to implement an asynchronous log writing program

logger日志库 1、安装 go get github.com/staryjie/logger@latest 2、使用 示例: package main import ( "github.com/staryjie/logger" "time" ) func initLogger(name,

Jan 4, 2022
A simple logging framework for Go program.
A simple logging framework for Go program.

ASLP A Go language based log library, simple, convenient and concise. Three modes, standard output, file mode and common mode. Convenient, simple and

Nov 14, 2022
Monitoriamento-go - Program for monitoring websites in Golang

***Programa para monitoriamento de sites em Go lang. *** No "sitesaqui.txt" colo

Feb 2, 2022
Time based rotating file writer

cronowriter This is a simple file writer that it writes message to the specified format path. The file path is constructed based on current date and t

Dec 29, 2022
The Prometheus monitoring system and time series database.

Prometheus Visit prometheus.io for the full documentation, examples and guides. Prometheus, a Cloud Native Computing Foundation project, is a systems

Dec 31, 2022
Time Series Alerting Framework

Bosun Bosun is a time series alerting framework developed by Stack Exchange. Scollector is a metric collection agent. Learn more at bosun.org. Buildin

Dec 27, 2022
List files and their creation, modification and access time on android

andfind List files and their access, modification and creation date on a Android

Jan 5, 2022
dateparse time by struct tag

dateparse_tag dateparse time by struct tag intro&简介 WithTagName() // 自定义你想要使用的tag名称,默认为dateFormat WithDefaultTagValue() // 定义这个tag的默认值,默认为 default Wit

Jan 13, 2022
A simple digital clock written in go to show time in hh : mm : ss format in console

Go console clock a simple digital clock written in go to show time in "hh : mm :

Feb 3, 2022