Visualise Go program GC trace data in real time

Overview

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
Issues
  • 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.
    opened by kouno 9
  • 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).

    opened by nussjustin 4
  • 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

    opened by Dieterbe 4
  • 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?

    opened by kouno 4
  • 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.

    opened by kouno 3
  • 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.

    opened by kouno 3
  • 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:.

    opened by kouno 1
  • 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.

    opened by kouno 1
  • 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)

    opened by lootek 0
  • 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.

    opened by tiedotguy 0
  • 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.

    opened by matttproud 3
  • 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).

    opened by SimonRichardson 8
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

Gabriel S. Facina 4 Jun 4, 2022
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

kubeshop 157 Aug 7, 2022
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.

Ryo Nakao 444 Jul 29, 2022
Felix Geisendörfer 28 Feb 9, 2022
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

DiDi 1.1k Jul 27, 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

Jason Kulatunga 1.5k Aug 1, 2022
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

RexWu 2 Jan 22, 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

InfluxData 2.1k Aug 3, 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

Shulhan 22 Mar 20, 2019
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

xyctruth 107 Jul 22, 2022
Logger - Go language is interface-oriented to implement an asynchronous log writing program

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

StaryJie 0 Jan 4, 2022
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

丙杺 1 Jan 9, 2022
Monitoriamento-go - Program for monitoring websites in Golang

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

Rinvysson 1 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

Yuta UEKUSA 47 Feb 8, 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

Prometheus 43.7k Aug 4, 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

Bosun 3.3k Jul 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

Tek 2 Jan 5, 2022
dateparse time by struct tag

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

coward 1 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 :

Mojtaba Khodami 0 Feb 3, 2022