gsa

package module
v1.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2024 License: AGPL-3.0 Imports: 6 Imported by: 0

README

go-size-analyzer

Go Report Card Tests codecov GitHub release homebrew version

English | 简体中文

A simple tool to analyze the size of a Go compiled binary.

Installation

Download the latest release from the release page

You can use Homebrew to install go-size-analyzer

brew install go-size-analyzer

Or use the following command to install the latest version:

go install github.com/Zxilly/go-size-analyzer/cmd/gsa@latest

Usage

Example
Web mode
$ gsa --web golang-compiled-binary

Will start a web server on port 8080, you can view the result in your browser.

The web page will look like this:

image

You can click to expand the package to see the details.

Terminal UI (Experimental)
$ gsa --tui golang-compiled-binary

image

[!NOTE]
There may be a problem with the UI display on Windows, which is caused by dependent libraries. Try running it on linux/WSL if you encounter problems.

Text mode
$ gsa docker-compose-linux-x86_64
+------------------------------------------------------------------------------+
| docker-compose-linux-x86_64                                                  |
+---------+-----------------------------------------------+--------+-----------+
| PERCENT | NAME                                          | SIZE   | TYPE      |
+---------+-----------------------------------------------+--------+-----------+
| 27.76%  | .gopclntab                                    | 17 MB  | section   |
| 15.17%  | .rodata                                       | 9.5 MB | section   |
| 11.63%  | k8s.io/api                                    | 7.3 MB | vendor    |
| 6.69%   | .strtab                                       | 4.2 MB | section   |
| 3.47%   | k8s.io/client-go                              | 2.2 MB | vendor    |
| 3.37%   | .symtab                                       | 2.1 MB | section   |
| 2.28%   | github.com/moby/buildkit                      | 1.4 MB | vendor    |
| 1.54%   | github.com/gogo/protobuf                      | 968 kB | vendor    |
| 1.53%   | github.com/google/gnostic-models              | 958 kB | vendor    |
| 1.33%   | github.com/aws/aws-sdk-go-v2                  | 836 kB | vendor    |
| 1.26%   | crypto                                        | 790 kB | std       |
| 1.25%   | google.golang.org/protobuf                    | 782 kB | vendor    |
| 1.24%   | k8s.io/apimachinery                           | 779 kB | vendor    |
| 1.24%   | net                                           | 777 kB | std       |
| 1.20%   | github.com/docker/compose/v2                  | 752 kB | main      |
| 0.95%   | .noptrdata                                    | 596 kB | section   |
| 0.93%   | go.opentelemetry.io/otel                      | 582 kB | vendor    |
| 0.85%   | google.golang.org/grpc                        | 533 kB | vendor    |
| 0.71%   | runtime                                       | 442 kB | std       |
| 0.59%   | github.com/docker/buildx                      | 371 kB | vendor    |
| 0.55%   | github.com/docker/docker                      | 347 kB | vendor    |
| 0.53%   |                                               | 331 kB | generated |
| 0.52%   | golang.org/x/net                              | 326 kB | vendor    |
| 0.47%   | github.com/theupdateframework/notary          | 294 kB | vendor    |

...[Collapsed]...

| 0.00%   | database/sql/driver                           | 128 B  | std       |
| 0.00%   | .note.go.buildid                              | 100 B  | section   |
| 0.00%   | hash/fnv                                      | 96 B   | std       |
| 0.00%   | maps                                          | 96 B   | std       |
| 0.00%   | github.com/moby/sys/sequential                | 64 B   | vendor    |
| 0.00%   | .text                                         | 1 B    | section   |
+---------+-----------------------------------------------+--------+-----------+
| 97.65%  | KNOWN                                         | 61 MB  |           |
| 100%    | TOTAL                                         | 63 MB  |           |
+---------+-----------------------------------------------+--------+-----------+

Svg Mode
gsa cockroach-darwin-amd64 -f svg -o data.svg --hide-sections

image

Full options
Usage: gsa <file> [flags]

A tool for analyzing the size of dependencies in compiled Golang binaries,
providing insight into their impact on the final build.

Arguments:
  <file>    Binary file to analyze

Flags:
  -h, --help             Show context-sensitive help.
      --verbose          Verbose output
  -f, --format="text"    Output format, possible values: text,json,html,svg
      --no-disasm        Skip disassembly pass
      --no-symbol        Skip symbol pass
  -o, --output=STRING    Write to file
      --version          Show version

Text output options
  --hide-sections    Hide sections
  --hide-main        Hide main package
  --hide-std         Hide standard library

Json output options
  --indent=INDENT    Indentation for json output
  --compact          Hide function details, replacement with size

Svg output options
  --width=1028         Width of the svg treemap
  --height=640         Height of the svg treemap
  --margin-box=4       Margin between boxes
  --padding-box=4      Padding between box border and content
  --padding-root=32    Padding around root content

Disassembly options
  --gc-rate=512    Disassemble GC rate, higher means faster and more ram        
                   consumption

Web interface options
  --web               use web interface to explore the details
  --listen=":8080"    listen address
  --open              Open browser

Terminal interface options
  --tui    use terminal interface to explore the details

[!CAUTION]

The tool can work with stripped binaries, but it may lead to inaccurate results.

TODO

  • Add more pattern for disassembling the binary
  • Extract the information from the DWARF section
  • Count the symbol size itself to package
  • Add other charts like flame graph, pie chart, etc.
  • Support C++/Rust symbol demangling in cgo
  • Add a TUI mode for exploring details

Contribution

Any contribution is welcome, feel free to open an issue or a pull request.

LICENSE

Published under the AGPL-3.0.

Documentation

Index

Constants

View Source
const (
	// StaticVersion when update this, also update the version string in workflow
	StaticVersion = "1"
)

Variables

This section is empty.

Functions

func SprintVersion

func SprintVersion() string

Types

This section is empty.

Directories

Path Synopsis
cmd
gsa
disasm
Package disasm This package was written based on the go/cmd/internal/objfile package.
Package disasm This package was written based on the go/cmd/internal/objfile package.
tui

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL