Skip to content

binary size analytics of prometheus binary. #16459

@jkroepke

Description

@jkroepke

Proposal

While implement a new service discovery, there was a side discussion about total binary size of prometheus. I looked into this and provide some data and analytics of various tools. Not all tools provide useful data, but I would like to share them anyways.

Analysis

All analytice are done on a Linux/arm64 system on commit 5afa652

Binary Sizes

Command Size
go build -o prometheus ./cmd/prometheus/ 147063797
make build 150309941
go build -tags netgo,builtinassets,stringlabels -o prometheus ./cmd/prometheus/ 150306223
go build -ldflags "-w -s" -tags netgo,builtinassets,stringlabels -o prometheus ./cmd/prometheus/ 106496260
go build -ldflags "-w -s" -tags netgo,builtinassets,stringlabels -trimpath -o prometheus ./cmd/prometheus/ 106365188

Root causes

With go tool nm with can see the size of an function.

Output
go tool nm -size -sort size prometheus 2>/dev/null | head -20

  57b2f0    1032752 T github.com/aws/aws-sdk-go/aws/endpoints.init
 44d6260     222156 r runtime.typelink
 44a0460     217396 r runtime.findfunctab
 65c8880     101696 D runtime.mheap_
 16e19c0      55472 T k8s.io/api/core/v1.init
 450c640      47320 r runtime.itablink
 2a72bd0      40784 T main.main
 26b6f40      40144 T github.com/prometheus/prometheus/promql/parser.(*yyParserImpl).Parse
 65c0b00      32128 D runtime.semtable
 65ed920      30736 D crypto/internal/edwards25519.basepointTablePrecomp
 2602fd0      24208 T github.com/envoyproxy/go-control-plane/envoy/config/core/v3.(*HealthCheck).validate
 1f6e820      22784 T github.com/google/gnostic-models/openapiv3.NewSchema
 182da00      22288 T k8s.io/api/core/v1.(*PodSpec).Unmarshal
 1f9b6c0      19824 T github.com/google/gnostic-models/openapiv3.(*Schema).ToRawInfo
 654a820      19426 D golang.org/x/text/unicode/norm.decomps
 654f420      19426 D vendor/golang.org/x/text/unicode/norm.decomps
 19dbc50      19296 T github.com/google/gnostic-models/openapiv2.NewSchema
 64b0000      19120 D go:buildinfo
 4493420      19076 R runtime.modinfo.str
 26df7d0      18176 T github.com/prometheus/prometheus/promql.(*evaluator).eval

Size by dependency

Top Level module size using go tool nm

go tool nm -size prometheus | \
  awk '{ if ($2 ~ /^[0-9a-f]+$/ && $4 ~ /^[A-Za-z0-9_.\/-]+$/) print $1, $2, $3, $4 }' | \
  awk '{ split($4, parts, "/"); print $1, parts[1]"/"parts[2] }' | \
  awk '{sizes[$2] += strtonum("0x"$1)} END {for (p in sizes) printf "%10d %s\n", sizes[p], p}' | \
  sort -nr | head
Output
305160767184 k8s.io/api
177496621969 github.com/prometheus
137972622256 github.com/envoyproxy
111311689078 github.com/aws
107515098633 k8s.io/client-go
70340285368 google.golang.org/protobuf
56254934555 golang.org/x
53955347533 k8s.io/apimachinery
49031451418 github.com/gogo
48935825720 go.opentelemetry.io/collector
34069508952 github.com/hashicorp
31793063480 go.opentelemetry.io/otel
29683894695 google.golang.org/grpc
28502163252 github.com/google
25715191976 github.com/cncf
23336618399 google.golang.org/api
21085652523 github.com/docker
19023559199 go.mongodb.org/mongo-driver
18305680280 github.com/go-openapi
18244298193 k8s.io/kube-openapi

Dependency size using go tool nm

go tool nm -size prometheus | \
  awk '{ if (NF >= 4 && $2 ~ /^[0-9a-f]+$/) print $1, $4 }' | \
  sed -E 's/[(].*//; s/[.](init|eq|func[0-9]+|itab|f64|type|r[0-9]+|[0-9]+)?$//' | \
  awk '{sizes[$2] += strtonum("0x"$1)} END {for (p in sizes) printf "%12d %s\n", sizes[p], p}' | \
  sort -nr | head -30
Output
187460189072 github.com/aws/aws-sdk-go/service/ec2
173795570320 google.golang.org/api/compute/v1
128769844624 k8s.io/client-go/gentype
123310559776 k8s.io/api/core/v1
 76741162960 github.com/envoyproxy/go-control-plane/envoy/config/core/v3
 43289213904 github.com/aws/aws-sdk-go/service/lightsail
 41729295648 k8s.io/client-go/applyconfigurations/core/v1
 33169262880 k8s.io/api/extensions/v1beta1
 28205747008 github.com/google/gnostic-models/openapiv3
 26608723168 k8s.io/api/resource/v1beta1
 26304722368 github.com/gogo/protobuf/types
 26134700848 k8s.io/api/resource/v1alpha3
 25723067920 k8s.io/apimachinery/pkg/apis/meta/v1
 25291560256 github.com/prometheus/prometheus/tsdb
 25201402368 k8s.io/api/apps/v1beta2
 23894107392 github.com/hashicorp/nomad/api
 22645395008 k8s.io/api/storage/v1beta1
 21439689056 k8s.io/api/apps/v1
 21030856480 github.com/google/gnostic-models/openapiv2
 20379399664 github.com/linode/linodego
 20215934224 k8s.io/api/networking/v1beta1
 19906622496 github.com/ionos-cloud/sdk-go/v6
 19642529840 github.com/gogo/protobuf/protoc-gen-gogo/descriptor
 18639160784 k8s.io/api/storage/v1
 18234612304 k8s.io/api/admissionregistration/v1alpha1
 18157175120 k8s.io/api/admissionregistration/v1
 18079676384 github.com/digitalocean/godo
 18028803936 k8s.io/api/admissionregistration/v1beta1
 17227532784 k8s.io/api/apps/v1beta1
 16881487632 github.com/envoyproxy/go-control-plane/envoy/type/matcher/v3

goweight

goweight is another tool to track depenendcy sizes. However the number seems a bit odd because the sizes of the deps are more than the total size

go run github.com/jondot/goweight@latest --tags netgo,builtinassets,stringlabels ./cmd/prometheus/
  124 MB github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4
   80 MB github.com/aws/aws-sdk-go/service/ec2
   57 MB google.golang.org/api/compute/v1
   55 MB github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5
   41 MB github.com/ionos-cloud/sdk-go/v6
   24 MB k8s.io/api/core/v1
   16 MB github.com/aws/aws-sdk-go/service/lightsail
   13 MB runtime
   12 MB github.com/envoyproxy/go-control-plane/envoy/config/core/v3
   10 MB github.com/linode/linodego
  9.8 MB github.com/aws/aws-sdk-go/service/ec2/ec2iface
  8.7 MB net/http
  8.5 MB k8s.io/client-go/kubernetes/typed/core/v1
  7.8 MB github.com/digitalocean/godo
  7.7 MB github.com/hetznercloud/hcloud-go/v2/hcloud
  7.3 MB github.com/miekg/dns
  7.2 MB k8s.io/client-go/applyconfigurations/core/v1
  6.6 MB github.com/prometheus/prometheus/tsdb
  6.4 MB google.golang.org/protobuf/internal/impl
  6.2 MB k8s.io/apimachinery/pkg/apis/meta/v1
  6.2 MB github.com/aws/aws-sdk-go/aws/endpoints
  5.7 MB github.com/google/gnostic-models/openapiv3
  5.6 MB github.com/gogo/protobuf/proto
  5.6 MB github.com/google/gnostic-models/openapiv2
  5.4 MB github.com/prometheus/prometheus/discovery/azure
  5.1 MB k8s.io/api/extensions/v1beta1
  5.0 MB github.com/hashicorp/nomad/api
  4.7 MB github.com/prometheus/prometheus/discovery/kubernetes
  4.5 MB github.com/hashicorp/consul/api
  4.3 MB golang.org/x/net/http2
  4.2 MB crypto/tls
  4.1 MB k8s.io/api/apps/v1beta2
  4.1 MB golang.org/x/sys/unix
  4.1 MB google.golang.org/grpc

bloaty

bloaty works on ELF level, less go specific.

Run bloaty on prometheus with debug symbols

# go build -gcflags='-l -N' -tags netgo,builtinassets,stringlabels -o prometheus ./cmd/prometheus/
# bloaty prometheus  -d symbols
    FILE SIZE        VM SIZE
 --------------  --------------
  40.9%  58.6Mi  41.7%  42.5Mi    [168456 Others]
  22.0%  31.5Mi  31.0%  31.5Mi    [section .gopclntab]
  17.8%  25.6Mi  25.1%  25.6Mi    [section .rodata]
   7.5%  10.8Mi   0.0%       0    [section .debug_info]
   5.1%  7.30Mi   0.0%       0    [section .debug_loc]
   3.1%  4.42Mi   0.0%       0    [section .debug_line]
   1.1%  1.57Mi   0.0%       0    [section .debug_ranges]
   1.0%  1.40Mi   0.0%       0    [section .debug_frame]
   0.7%  1008Ki   1.0%  1008Ki    github.com/aws/aws-sdk-go/aws/endpoints.init
   0.2%   332Ki   0.3%   332Ki    [section .noptrdata]
   0.1%   217Ki   0.2%   217Ki    runtime.typelink
   0.1%   212Ki   0.2%   212Ki    runtime.findfunctab
   0.1%   145Ki   0.0%       0    [Unmapped]
   0.1%   144Ki   0.1%   144Ki    [section .data]
   0.0%      39   0.1%  99.3Ki    runtime.mheap_
   0.0%  54.2Ki   0.1%  54.2Ki    k8s.io/api/core/v1.init
   0.0%  46.3Ki   0.0%  46.3Ki    runtime.itablink
   0.0%  39.9Ki   0.0%  39.8Ki    main.main
   0.0%  39.3Ki   0.0%  39.2Ki    github.com/prometheus/prometheus/promql/parser.(*yyParserImpl).Parse
   0.0%      41   0.0%  31.4Ki    runtime.semtable
   0.0%      75   0.0%  30.0Ki    crypto/internal/edwards25519.basepointTablePrecomp
 100.0%   143Mi 100.0%   101Mi    TOTAL

Run bloaty on prometheus with stripped symbols

# go build   -tags netgo,builtinassets,stringlabels -ldflags="-s -w"   -o prometheus   ./cmd/prometheus/
# bloaty prometheus  -d symbols
    FILE SIZE        VM SIZE
 --------------  --------------
  41.8%  42.5Mi  41.7%  42.5Mi    [section .text]
  31.0%  31.5Mi  31.0%  31.5Mi    [section .gopclntab]
  25.9%  26.3Mi  25.8%  26.3Mi    [section .rodata]
   0.6%   636Ki   0.6%   636Ki    [section .noptrdata]
   0.3%   304Ki   0.3%   304Ki    [section .data]
   0.0%       0   0.3%   260Ki    [section .bss]
   0.2%   216Ki   0.2%   216Ki    [section .typelink]
   0.1%   145Ki   0.0%       0    [Unmapped]
   0.0%       0   0.1%  78.9Ki    [section .noptrbss]
   0.0%  46.2Ki   0.0%  46.2Ki    [section .itablink]
   0.0%  18.7Ki   0.0%  18.7Ki    [section .go.buildinfo]
   0.0%  3.90Ki   0.0%  3.90Ki    [LOAD #3 [RX]]
   0.0%  1.10Ki   0.0%  1.10Ki    [section .dynsym]
   0.0%     936   0.0%     936    [section .rela.plt]
   0.0%     672   0.0%     672    [section .dynstr]
   0.0%     656   0.0%     656    [section .plt]
   0.0%     597   0.0%     613    [9 Others]
   0.0%     336   0.0%     336    [section .got.plt]
   0.0%     304   0.0%     304    [section .dynamic]
   0.0%     260   0.0%       0    [section .shstrtab]
   0.0%     224   0.0%     224    [section .hash]
 100.0%   101Mi 100.0%   101Mi    TOTAL

go-size-analyzer

go-size-analyzer seems a new approach to identify

Image

go run github.com/Zxilly/go-size-analyzer/cmd/gsa@latest prometheus
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ prometheus.x64                                                                                                                │
├─────────┬────────────────────────────────────────────────────────────────────────────────────────────────┬────────┬───────────┤
│ PERCENT │ NAME                                                                                           │ SIZE   │ TYPE      │
├─────────┼────────────────────────────────────────────────────────────────────────────────────────────────┼────────┼───────────┤
│ 15.60%  │ .rodata                                                                                        │ 24 MB  │ section   │
│ 11.03%  │ k8s.io/api                                                                                     │ 17 MB  │ vendor    │
│ 9.11%   │ github.com/aws/aws-sdk-go                                                                      │ 14 MB  │ vendor    │
│ 8.62%   │ .strtab                                                                                        │ 13 MB  │ section   │
│ 7.69%   │ .debug_info                                                                                    │ 12 MB  │ section   │
│ 7.52%   │ k8s.io/client-go                                                                               │ 11 MB  │ vendor    │
│ 5.12%   │ google.golang.org/api                                                                          │ 7.7 MB │ vendor    │
│ 4.89%   │ .debug_loc                                                                                     │ 7.4 MB │ section   │
│ 3.55%   │ github.com/prometheus/prometheus                                                               │ 5.4 MB │ vendor    │
│ 3.54%   │ .debug_line                                                                                    │ 5.3 MB │ section   │
│ 2.69%   │ .symtab                                                                                        │ 4.1 MB │ section   │
│ 1.46%   │ github.com/envoyproxy/go-control-plane/envoy                                                   │ 2.2 MB │ vendor    │
│ 1.45%   │                                                                                                │ 2.2 MB │ generated │
│ 1.27%   │ google.golang.org/protobuf                                                                     │ 1.9 MB │ vendor    │
│ 1.25%   │ .debug_ranges                                                                                  │ 1.9 MB │ section   │
│ 1.23%   │ crypto                                                                                         │ 1.9 MB │ std       │
│ 1.17%   │ k8s.io/apimachinery                                                                            │ 1.8 MB │ vendor    │
│ 1.11%   │ net                                                                                            │ 1.7 MB │ std       │
│ 1.02%   │ github.com/google/gnostic-models                                                               │ 1.5 MB │ vendor    │
│ 0.97%   │ go.opentelemetry.io/collector/pdata                                                            │ 1.5 MB │ vendor    │
│ 0.95%   │ .debug_frame                                                                                   │ 1.4 MB │ section   │
│ 0.91%   │ github.com/Azure/azure-sdk-for-go/sdk/azcore                                                   │ 1.4 MB │ vendor    │
│ 0.79%   │ runtime                                                                                        │ 1.2 MB │ std       │
│ 0.76%   │ github.com/gogo/protobuf                                                                       │ 1.1 MB │ vendor    │
│ 0.73%   │ google.golang.org/grpc                                                                         │ 1.1 MB │ vendor    │
│ 0.66%   │ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5                    │ 1.0 MB │ vendor    │
│ 0.56%   │ go.opentelemetry.io/otel                                                                       │ 851 kB │ vendor    │
│ 0.55%   │ github.com/linode/linodego                                                                     │ 836 kB │ vendor    │
│ 0.48%   │ go.mongodb.org/mongo-driver                                                                    │ 723 kB │ vendor    │
│ 0.45%   │ github.com/modern-go/reflect2                                                                  │ 678 kB │ vendor    │
│ 0.40%   │ golang.org/x/net                                                                               │ 608 kB │ vendor    │
│ 0.38%   │ github.com/digitalocean/godo                                                                   │ 575 kB │ vendor    │
│ 0.37%   │ github.com/miekg/dns                                                                           │ 566 kB │ vendor    │
│ 0.36%   │ github.com/hetznercloud/hcloud-go/v2                                                           │ 551 kB │ vendor    │
│ 0.36%   │ github.com/klauspost/compress                                                                  │ 548 kB │ vendor    │
│ 0.36%   │ slices                                                                                         │ 548 kB │ std       │
│ 0.32%   │ github.com/hashicorp/consul/api                                                                │ 483 kB │ vendor    │
│ 0.31%   │ github.com/docker/docker                                                                       │ 474 kB │ vendor    │
│ 0.31%   │ k8s.io/kube-openapi                                                                            │ 473 kB │ vendor    │
│ 0.30%   │ github.com/AzureAD/microsoft-authentication-library-for-go                                     │ 450 kB │ vendor    │
│ 0.29%   │ github.com/json-iterator/go                                                                    │ 438 kB │ vendor    │
│ 0.29%   │ go.uber.org/zap                                                                                │ 436 kB │ vendor    │
│ 0.28%   │ github.com/hashicorp/nomad/api                                                                 │ 426 kB │ vendor    │
│ 0.28%   │ github.com/gophercloud/gophercloud/v2                                                          │ 422 kB │ vendor    │
│ 0.28%   │ github.com/alecthomas/kingpin/v2                                                               │ 417 kB │ vendor    │
│ 0.27%   │ github.com/prometheus/client_golang                                                            │ 412 kB │ vendor    │
│ 0.27%   │ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4                    │ 410 kB │ vendor    │
│ 0.24%   │ golang.org/x/text                                                                              │ 363 kB │ vendor    │
│ 0.23%   │ github.com/ionos-cloud/sdk-go/v6                                                               │ 351 kB │ vendor    │
│ 0.23%   │ reflect                                                                                        │ 348 kB │ std       │
│ 0.20%   │ github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatocumulativeprocessor │ 304 kB │ vendor    │
│ 0.20%   │ github.com/google/go-cmp                                                                       │ 304 kB │ vendor    │
│ 0.20%   │ math                                                                                           │ 301 kB │ std       │
│ 0.20%   │ gopkg.in/yaml.v3                                                                               │ 300 kB │ vendor    │
│ 0.19%   │ sigs.k8s.io/structured-merge-diff/v4                                                           │ 291 kB │ vendor    │
│ 0.19%   │ sigs.k8s.io/yaml                                                                               │ 289 kB │ vendor    │
│ 0.18%   │ github.com/go-openapi/spec                                                                     │ 276 kB │ vendor    │
│ 0.18%   │ text/template                                                                                  │ 271 kB │ std       │
│ 0.17%   │ gopkg.in/yaml.v2                                                                               │ 260 kB │ vendor    │
│ 0.16%   │ github.com/fxamacker/cbor/v2                                                                   │ 246 kB │ vendor    │
│ 0.15%   │ github.com/google/s2a-go                                                                       │ 234 kB │ vendor    │
│ 0.15%   │ github.com/go-openapi/strfmt                                                                   │ 231 kB │ vendor    │
│ 0.15%   │ github.com/prometheus/common                                                                   │ 229 kB │ vendor    │
│ 0.15%   │ github.com/scaleway/scaleway-sdk-go                                                            │ 228 kB │ vendor    │
│ 0.15%   │ encoding/gob                                                                                   │ 228 kB │ std       │
│ 0.15%   │ .data                                                                                          │ 225 kB │ section   │
│ 0.15%   │ .typelink                                                                                      │ 224 kB │ section   │
│ 0.14%   │ github.com/cncf/xds/go                                                                         │ 213 kB │ vendor    │
│ 0.13%   │ cloud.google.com/go/auth                                                                       │ 198 kB │ vendor    │
│ 0.12%   │ os                                                                                             │ 181 kB │ std       │
│ 0.12%   │ regexp                                                                                         │ 177 kB │ std       │
│ 0.11%   │ github.com/go-resty/resty/v2                                                                   │ 170 kB │ vendor    │
│ 0.11%   │ github.com/grafana/regexp                                                                      │ 166 kB │ vendor    │
│ 0.11%   │ golang.org/x/oauth2                                                                            │ 165 kB │ vendor    │
│ 0.11%   │ encoding/json                                                                                  │ 164 kB │ std       │
│ 0.11%   │ time                                                                                           │ 162 kB │ std       │
│ 0.10%   │ github.com/Azure/azure-sdk-for-go/sdk/azidentity                                               │ 154 kB │ vendor    │
│ 0.10%   │ sigs.k8s.io/json                                                                               │ 152 kB │ vendor    │
│ 0.10%   │ github.com/go-openapi/validate                                                                 │ 148 kB │ vendor    │
│ 0.09%   │ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp                                  │ 143 kB │ vendor    │
│ 0.09%   │ k8s.io/klog                                                                                    │ 133 kB │ vendor    │
│ 0.09%   │ html                                                                                           │ 131 kB │ std       │
│ 0.09%   │ log                                                                                            │ 130 kB │ std       │
│ 0.08%   │ google.golang.org/genproto/googleapis/api                                                      │ 128 kB │ vendor    │
│ 0.08%   │ github.com/vultr/govultr/v2                                                                    │ 128 kB │ vendor    │
│ 0.08%   │ main                                                                                           │ 126 kB │ main      │
│ 0.08%   │ encoding/xml                                                                                   │ 125 kB │ std       │
│ 0.08%   │ github.com/emicklei/go-restful/v3                                                              │ 124 kB │ vendor    │
│ 0.08%   │ .noptrdata                                                                                     │ 118 kB │ section   │
│ 0.07%   │ github.com/jmespath/go-jmespath                                                                │ 113 kB │ vendor    │
│ 0.07%   │ internal/sync                                                                                  │ 100 kB │ std       │
│ 0.07%   │ github.com/puzpuzpuz/xsync/v3                                                                  │ 100 kB │ vendor    │
│ 0.07%   │ fmt                                                                                            │ 99 kB  │ std       │
│ 0.07%   │ internal/profile                                                                               │ 98 kB  │ std       │
│ 0.06%   │ internal/poll                                                                                  │ 96 kB  │ std       │
│ 0.06%   │ github.com/envoyproxy/protoc-gen-validate                                                      │ 95 kB  │ vendor    │
│ 0.06%   │ go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace                   │ 94 kB  │ vendor    │
│ 0.06%   │ vendor/golang.org/x/text/unicode/norm                                                          │ 94 kB  │ std       │
│ 0.06%   │ syscall                                                                                        │ 93 kB  │ std       │
│ 0.06%   │ github.com/golang-jwt/jwt/v5                                                                   │ 88 kB  │ vendor    │
│ 0.06%   │ go.opentelemetry.io/auto/sdk                                                                   │ 87 kB  │ vendor    │
│ 0.06%   │ github.com/gorilla/websocket                                                                   │ 86 kB  │ vendor    │
│ 0.06%   │ github.com/mailru/easyjson                                                                     │ 85 kB  │ vendor    │
│ 0.06%   │ github.com/go-zookeeper/zk                                                                     │ 84 kB  │ vendor    │
│ 0.05%   │ mime                                                                                           │ 79 kB  │ std       │
│ 0.05%   │ internal/abi                                                                                   │ 77 kB  │ std       │
│ 0.05%   │ sync                                                                                           │ 76 kB  │ std       │
│ 0.05%   │ encoding/asn1                                                                                  │ 72 kB  │ std       │
│ 0.05%   │ github.com/mitchellh/mapstructure                                                              │ 72 kB  │ vendor    │
│ 0.05%   │ strconv                                                                                        │ 71 kB  │ std       │
│ 0.05%   │ github.com/armon/go-metrics                                                                    │ 71 kB  │ vendor    │
│ 0.05%   │ go.opentelemetry.io/proto/otlp                                                                 │ 70 kB  │ vendor    │
│ 0.05%   │ compress/flate                                                                                 │ 70 kB  │ std       │
│ 0.05%   │ vendor/golang.org/x/crypto/chacha20poly1305                                                    │ 70 kB  │ std       │
│ 0.05%   │ gopkg.in/ini.v1                                                                                │ 68 kB  │ vendor    │
│ 0.04%   │ vendor/golang.org/x/net/idna                                                                   │ 65 kB  │ std       │
│ 0.04%   │ github.com/hashicorp/go-retryablehttp                                                          │ 64 kB  │ vendor    │
│ 0.04%   │ github.com/felixge/httpsnoop                                                                   │ 62 kB  │ vendor    │
│ 0.04%   │ golang.org/x/crypto                                                                            │ 58 kB  │ vendor    │
│ 0.04%   │ strings                                                                                        │ 55 kB  │ std       │
│ 0.04%   │ github.com/go-logr/logr                                                                        │ 55 kB  │ vendor    │
│ 0.04%   │ github.com/go-openapi/swag                                                                     │ 54 kB  │ vendor    │
│ 0.04%   │ internal/reflectlite                                                                           │ 53 kB  │ std       │
│ 0.03%   │ github.com/davecgh/go-spew                                                                     │ 51 kB  │ vendor    │
│ 0.03%   │ github.com/googleapis/gax-go/v2                                                                │ 50 kB  │ vendor    │
│ 0.03%   │ go/doc                                                                                         │ 50 kB  │ std       │
│ 0.03%   │ github.com/kylelemons/godebug                                                                  │ 48 kB  │ vendor    │
│ 0.03%   │ google.golang.org/genproto/googleapis/rpc                                                      │ 47 kB  │ vendor    │
│ 0.03%   │ .itablink                                                                                      │ 47 kB  │ section   │
│ 0.03%   │ io                                                                                             │ 44 kB  │ std       │
│ 0.03%   │ context                                                                                        │ 44 kB  │ std       │
│ 0.03%   │ github.com/hashicorp/go-hclog                                                                  │ 43 kB  │ vendor    │
│ 0.03%   │ encoding/binary                                                                                │ 42 kB  │ std       │
│ 0.03%   │ github.com/distribution/reference                                                              │ 42 kB  │ vendor    │
│ 0.03%   │ github.com/hashicorp/go-immutable-radix                                                        │ 40 kB  │ vendor    │
│ 0.03%   │ github.com/Code-Hex/go-generics-cache                                                          │ 40 kB  │ vendor    │
│ 0.03%   │ github.com/prometheus/client_model                                                             │ 40 kB  │ vendor    │
│ 0.03%   │ bytes                                                                                          │ 39 kB  │ std       │
│ 0.03%   │ bufio                                                                                          │ 39 kB  │ std       │
│ 0.03%   │ github.com/prometheus/procfs                                                                   │ 38 kB  │ vendor    │
│ 0.02%   │ github.com/kolo/xmlrpc                                                                         │ 37 kB  │ vendor    │
│ 0.02%   │ github.com/mwitkow/go-conntrack                                                                │ 37 kB  │ vendor    │
│ 0.02%   │ github.com/google/gofuzz                                                                       │ 36 kB  │ vendor    │
│ 0.02%   │ cloud.google.com/go/compute/metadata                                                           │ 36 kB  │ vendor    │
│ 0.02%   │ gopkg.in/inf.v0                                                                                │ 36 kB  │ vendor    │
│ 0.02%   │ sort                                                                                           │ 35 kB  │ std       │
│ 0.02%   │ vendor/golang.org/x/net/dns/dnsmessage                                                         │ 34 kB  │ std       │
│ 0.02%   │ vendor/golang.org/x/net/http2/hpack                                                            │ 34 kB  │ std       │
│ 0.02%   │ internal/runtime/maps                                                                          │ 33 kB  │ std       │
│ 0.02%   │ github.com/KimMachineGun/automemlimit                                                          │ 33 kB  │ vendor    │
│ 0.02%   │ github.com/hashicorp/cronexpr                                                                  │ 32 kB  │ vendor    │
│ 0.02%   │ github.com/julienschmidt/httprouter                                                            │ 30 kB  │ vendor    │
│ 0.02%   │ unicode                                                                                        │ 29 kB  │ std       │
│ 0.02%   │ k8s.io/utils                                                                                   │ 29 kB  │ vendor    │
│ 0.02%   │ github.com/oklog/ulid                                                                          │ 28 kB  │ vendor    │
│ 0.02%   │ github.com/go-openapi/errors                                                                   │ 28 kB  │ vendor    │
│ 0.02%   │ github.com/prometheus/exporter-toolkit                                                         │ 27 kB  │ vendor    │
│ 0.02%   │ vendor/golang.org/x/crypto/cryptobyte                                                          │ 25 kB  │ std       │
│ 0.02%   │ go.uber.org/automaxprocs                                                                       │ 24 kB  │ vendor    │
│ 0.02%   │ github.com/opencontainers/go-digest                                                            │ 24 kB  │ vendor    │
│ 0.02%   │ github.com/Azure/azure-sdk-for-go/sdk/internal                                                 │ 23 kB  │ vendor    │
│ 0.02%   │ vendor/golang.org/x/text/unicode/bidi                                                          │ 23 kB  │ std       │
│ 0.01%   │ github.com/ovh/go-ovh                                                                          │ 22 kB  │ vendor    │
│ 0.01%   │ go.uber.org/atomic                                                                             │ 21 kB  │ vendor    │
│ 0.01%   │ github.com/open-telemetry/opentelemetry-collector-contrib/internal/exp/metrics                 │ 21 kB  │ vendor    │
│ 0.01%   │ path                                                                                           │ 20 kB  │ std       │
│ 0.01%   │ hash                                                                                           │ 20 kB  │ std       │
│ 0.01%   │ golang.org/x/sys                                                                               │ 20 kB  │ vendor    │
│ 0.01%   │ github.com/fsnotify/fsnotify                                                                   │ 19 kB  │ vendor    │
│ 0.01%   │ github.com/pkg/errors                                                                          │ 19 kB  │ vendor    │
│ 0.01%   │ encoding/base64                                                                                │ 19 kB  │ std       │
│ 0.01%   │ .go.buildinfo                                                                                  │ 19 kB  │ section   │
│ 0.01%   │ github.com/go-logr/stdr                                                                        │ 18 kB  │ vendor    │
│ 0.01%   │ github.com/prometheus/alertmanager                                                             │ 18 kB  │ vendor    │
│ 0.01%   │ github.com/go-openapi/jsonpointer                                                              │ 18 kB  │ vendor    │
│ 0.01%   │ golang.org/x/time                                                                              │ 17 kB  │ vendor    │
│ 0.01%   │ github.com/shurcooL/httpfs                                                                     │ 17 kB  │ vendor    │
│ 0.01%   │ github.com/asaskevich/govalidator                                                              │ 17 kB  │ vendor    │
│ 0.01%   │ github.com/bboreham/go-loser                                                                   │ 16 kB  │ vendor    │
│ 0.01%   │ github.com/hashicorp/go-version                                                                │ 16 kB  │ vendor    │
│ 0.01%   │ flag                                                                                           │ 15 kB  │ std       │
│ 0.01%   │ internal/bisect                                                                                │ 14 kB  │ std       │
│ 0.01%   │ github.com/google/go-querystring                                                               │ 14 kB  │ vendor    │
│ 0.01%   │ vendor/golang.org/x/net/http/httpproxy                                                         │ 13 kB  │ std       │
│ 0.01%   │ text/tabwriter                                                                                 │ 13 kB  │ std       │
│ 0.01%   │ unique                                                                                         │ 13 kB  │ std       │
│ 0.01%   │ go.opentelemetry.io/collector/component                                                        │ 13 kB  │ vendor    │
│ 0.01%   │ compress/gzip                                                                                  │ 13 kB  │ std       │
│ 0.01%   │ github.com/googleapis/enterprise-certificate-proxy                                             │ 12 kB  │ vendor    │
│ 0.01%   │ github.com/hashicorp/go-multierror                                                             │ 11 kB  │ vendor    │
│ 0.01%   │ github.com/grpc-ecosystem/grpc-gateway/v2                                                      │ 11 kB  │ vendor    │
│ 0.01%   │ github.com/prometheus/otlptranslator                                                           │ 11 kB  │ vendor    │
│ 0.01%   │ internal/runtime/atomic                                                                        │ 10 kB  │ std       │
│ 0.01%   │ github.com/alecthomas/units                                                                    │ 10 kB  │ vendor    │
│ 0.01%   │ internal/godebug                                                                               │ 9.4 kB │ std       │
│ 0.01%   │ expvar                                                                                         │ 9.4 kB │ std       │
│ 0.01%   │ github.com/beorn7/perks                                                                        │ 9.3 kB │ vendor    │
│ 0.01%   │ embed                                                                                          │ 9.1 kB │ std       │
│ 0.01%   │ github.com/docker/go-connections                                                               │ 9.0 kB │ vendor    │
│ 0.01%   │ compress/zlib                                                                                  │ 8.8 kB │ std       │
│ 0.01%   │ internal/bytealg                                                                               │ 8.7 kB │ std       │
│ 0.01%   │ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil                        │ 8.5 kB │ vendor    │
│ 0.01%   │ internal/fmtsort                                                                               │ 7.9 kB │ std       │
│ 0.01%   │ container/list                                                                                 │ 7.8 kB │ std       │
│ 0.01%   │ encoding/base32                                                                                │ 7.7 kB │ std       │
│ 0.00%   │ github.com/modern-go/concurrent                                                                │ 7.5 kB │ vendor    │
│ 0.00%   │ github.com/prometheus/sigv4                                                                    │ 7.5 kB │ vendor    │
│ 0.00%   │ vendor/golang.org/x/crypto/chacha20                                                            │ 7.5 kB │ std       │
│ 0.00%   │ github.com/munnerz/goautoneg                                                                   │ 7.1 kB │ vendor    │
│ 0.00%   │ github.com/hashicorp/golang-lru                                                                │ 6.8 kB │ vendor    │
│ 0.00%   │ internal/cpu                                                                                   │ 6.7 kB │ std       │
│ 0.00%   │ github.com/google/uuid                                                                         │ 6.6 kB │ vendor    │
│ 0.00%   │ github.com/golang/protobuf                                                                     │ 6.6 kB │ vendor    │
│ 0.00%   │ go.uber.org/multierr                                                                           │ 6.5 kB │ vendor    │
│ 0.00%   │ github.com/fatih/color                                                                         │ 6.5 kB │ vendor    │
│ 0.00%   │ go.opentelemetry.io/collector/processor                                                        │ 6.4 kB │ vendor    │
│ 0.00%   │ go.opentelemetry.io/collector/featuregate                                                      │ 6.3 kB │ vendor    │
│ 0.00%   │ golang.org/x/sync                                                                              │ 6.3 kB │ vendor    │
│ 0.00%   │ vendor/golang.org/x/sys/cpu                                                                    │ 6.0 kB │ std       │
│ 0.00%   │ errors                                                                                         │ 5.6 kB │ std       │
│ 0.00%   │ github.com/golang/snappy                                                                       │ 5.5 kB │ vendor    │
│ 0.00%   │ github.com/go-openapi/jsonreference                                                            │ 5.1 kB │ vendor    │
│ 0.00%   │ encoding/hex                                                                                   │ 4.9 kB │ std       │
│ 0.00%   │ internal/filepathlite                                                                          │ 4.8 kB │ std       │
│ 0.00%   │ vendor/golang.org/x/net/http/httpguts                                                          │ 4.7 kB │ std       │
│ 0.00%   │ internal/singleflight                                                                          │ 4.6 kB │ std       │
│ 0.00%   │ github.com/xhit/go-str2duration/v2                                                             │ 4.5 kB │ vendor    │
│ 0.00%   │ encoding/pem                                                                                   │ 4.5 kB │ std       │
│ 0.00%   │ internal/sysinfo                                                                               │ 4.5 kB │ std       │
│ 0.00%   │ github.com/hashicorp/serf                                                                      │ 4.5 kB │ vendor    │
│ 0.00%   │ internal/chacha8rand                                                                           │ 4.4 kB │ std       │
│ 0.00%   │ github.com/edsrzf/mmap-go                                                                      │ 4.3 kB │ vendor    │
│ 0.00%   │ golang.org/x/term                                                                              │ 3.8 kB │ vendor    │
│ 0.00%   │ github.com/go-openapi/analysis                                                                 │ 3.5 kB │ vendor    │
│ 0.00%   │ internal/syscall/unix                                                                          │ 3.5 kB │ std       │
│ 0.00%   │ github.com/hashicorp/go-rootcerts                                                              │ 3.4 kB │ vendor    │
│ 0.00%   │ github.com/cespare/xxhash/v2                                                                   │ 3.2 kB │ vendor    │
│ 0.00%   │ vendor/golang.org/x/crypto/internal/poly1305                                                   │ 2.8 kB │ std       │
│ 0.00%   │ go.opentelemetry.io/collector/confmap                                                          │ 2.7 kB │ vendor    │
│ 0.00%   │ testing                                                                                        │ 2.7 kB │ std       │
│ 0.00%   │ github.com/stretchr/testify                                                                    │ 2.6 kB │ vendor    │
│ 0.00%   │ container/heap                                                                                 │ 2.6 kB │ std       │
│ 0.00%   │ internal/stringslite                                                                           │ 2.6 kB │ std       │
│ 0.00%   │ github.com/go-openapi/loads                                                                    │ 2.6 kB │ vendor    │
│ 0.00%   │ github.com/docker/go-units                                                                     │ 2.6 kB │ vendor    │
│ 0.00%   │ weak                                                                                           │ 2.4 kB │ std       │
│ 0.00%   │ vendor/golang.org/x/text/secure/bidirule                                                       │ 2.4 kB │ std       │
│ 0.00%   │ go.opentelemetry.io/collector/internal/telemetry                                               │ 2.2 kB │ vendor    │
│ 0.00%   │ internal/runtime/exithook                                                                      │ 2.0 kB │ std       │
│ 0.00%   │ github.com/cenkalti/backoff/v4                                                                 │ 1.9 kB │ vendor    │
│ 0.00%   │ internal/testlog                                                                               │ 1.9 kB │ std       │
│ 0.00%   │ go/token                                                                                       │ 1.7 kB │ std       │
│ 0.00%   │ github.com/pkg/browser                                                                         │ 1.7 kB │ vendor    │
│ 0.00%   │ go.opentelemetry.io/collector/pipeline                                                         │ 1.7 kB │ vendor    │
│ 0.00%   │ github.com/oklog/run                                                                           │ 1.6 kB │ vendor    │
│ 0.00%   │ github.com/jpillora/backoff                                                                    │ 1.6 kB │ vendor    │
│ 0.00%   │ internal/lazyregexp                                                                            │ 1.5 kB │ std       │
│ 0.00%   │ github.com/dennwc/varint                                                                       │ 1.3 kB │ vendor    │
│ 0.00%   │ github.com/facette/natsort                                                                     │ 1.1 kB │ vendor    │
│ 0.00%   │ github.com/mitchellh/copystructure                                                             │ 1.1 kB │ vendor    │
│ 0.00%   │ gopkg.in/evanphx/json-patch.v4                                                                 │ 1.1 kB │ vendor    │
│ 0.00%   │ internal/saferio                                                                               │ 1.1 kB │ std       │
│ 0.00%   │ .dynsym                                                                                        │ 1.1 kB │ section   │
│ 0.00%   │ .rela.plt                                                                                      │ 936 B  │ section   │
│ 0.00%   │ github.com/josharian/intern                                                                    │ 861 B  │ vendor    │
│ 0.00%   │ internal/itoa                                                                                  │ 777 B  │ std       │
│ 0.00%   │ go/parser                                                                                      │ 739 B  │ std       │
│ 0.00%   │ github.com/x448/float16                                                                        │ 737 B  │ vendor    │
│ 0.00%   │ .plt                                                                                           │ 640 B  │ section   │
│ 0.00%   │ .dynstr                                                                                        │ 629 B  │ section   │
│ 0.00%   │ database/sql                                                                                   │ 585 B  │ std       │
│ 0.00%   │ github.com/hashicorp/go-cleanhttp                                                              │ 550 B  │ vendor    │
│ 0.00%   │ internal/runtime/syscall                                                                       │ 538 B  │ std       │
│ 0.00%   │ github.com/spf13/pflag                                                                         │ 448 B  │ vendor    │
│ 0.00%   │ .shstrtab                                                                                      │ 403 B  │ section   │
│ 0.00%   │ github.com/opencontainers/image-spec                                                           │ 381 B  │ vendor    │
│ 0.00%   │ internal/profilerecord                                                                         │ 367 B  │ std       │
│ 0.00%   │ .debug_abbrev                                                                                  │ 343 B  │ section   │
│ 0.00%   │ .got.plt                                                                                       │ 336 B  │ section   │
│ 0.00%   │ github.com/pbnjay/memory                                                                       │ 327 B  │ vendor    │
│ 0.00%   │ github.com/mattn/go-isatty                                                                     │ 305 B  │ vendor    │
│ 0.00%   │ .dynamic                                                                                       │ 304 B  │ section   │
│ 0.00%   │ internal/runtime/sys                                                                           │ 281 B  │ std       │
│ 0.00%   │ iter                                                                                           │ 272 B  │ std       │
│ 0.00%   │ maps                                                                                           │ 224 B  │ std       │
│ 0.00%   │ .hash                                                                                          │ 212 B  │ section   │
│ 0.00%   │ go.uber.org/goleak                                                                             │ 193 B  │ vendor    │
│ 0.00%   │ .go.fipsinfo                                                                                   │ 120 B  │ section   │
│ 0.00%   │ .note.go.buildid                                                                               │ 100 B  │ section   │
│ 0.00%   │ .gnu.version                                                                                   │ 88 B   │ section   │
│ 0.00%   │ x_cgo_munmap                                                                                   │ 84 B   │ std       │
│ 0.00%   │ .gnu.version_r                                                                                 │ 80 B   │ section   │
│ 0.00%   │ .debug_gdb_scripts                                                                             │ 42 B   │ section   │
│ 0.00%   │ .note.gnu.build-id                                                                             │ 36 B   │ section   │
│ 0.00%   │ .interp                                                                                        │ 28 B   │ section   │
│ 0.00%   │ .rela                                                                                          │ 24 B   │ section   │
│ 0.00%   │ .text                                                                                          │ 16 B   │ section   │
│ 0.00%   │ .got                                                                                           │ 8 B    │ section   │
│ 0.00%   │ github.com/knadh/koanf/maps                                                                    │ 0 B    │ vendor    │
│ 0.00%   │ github.com/moby/docker-image-spec                                                              │ 0 B    │ vendor    │
│ 0.00%   │ github.com/mdlayher/socket                                                                     │ 0 B    │ vendor    │
│ 0.00%   │ github.com/coreos/go-systemd/v22                                                               │ 0 B    │ vendor    │
│ 0.00%   │ github.com/go-viper/mapstructure/v2                                                            │ 0 B    │ vendor    │
│ 0.00%   │ golang.org/x/exp                                                                               │ 0 B    │ vendor    │
│ 0.00%   │ github.com/mitchellh/reflectwalk                                                               │ 0 B    │ vendor    │
│ 0.00%   │ go.opentelemetry.io/contrib/bridges/otelzap                                                    │ 0 B    │ vendor    │
│ 0.00%   │ github.com/knadh/koanf/v2                                                                      │ 0 B    │ vendor    │
│ 0.00%   │ github.com/mattn/go-colorable                                                                  │ 0 B    │ vendor    │
│ 0.00%   │ github.com/knadh/koanf/providers/confmap                                                       │ 0 B    │ vendor    │
│ 0.00%   │ github.com/hashicorp/errwrap                                                                   │ 0 B    │ vendor    │
│ 0.00%   │ github.com/pmezard/go-difflib                                                                  │ 0 B    │ vendor    │
│ 0.00%   │ go.opentelemetry.io/collector/semconv                                                          │ 0 B    │ vendor    │
│ 0.00%   │ go.opentelemetry.io/collector/consumer                                                         │ 0 B    │ vendor    │
│ 0.00%   │ github.com/mdlayher/vsock                                                                      │ 0 B    │ vendor    │
├─────────┼────────────────────────────────────────────────────────────────────────────────────────────────┼────────┼───────────┤
│ 100.00% │ Known                                                                                          │ 151 MB │           │
│ 100%    │ Total                                                                                          │ 151 MB │           │
└─────────┴────────────────────────────────────────────────────────────────────────────────────────────────┴────────┴───────────┘

Tool summary

  • go tool nm provide some data, but not enough insights.
  • goweight is not useful, since the numbers seems odd. go-size-analyzer seems better here.
  • bloaty print some nice numbers, but not sure if they really helpful.
  • go-size-analyzer seems to be the best tooling to get an oversight about the binary.

Outcome

  • github.com/aws/aws-sdk-go/aws/endpoints seems to be one of the biggest here, not overall not heavy. A migration to SDK v2 maybe help here: Migrate AWS discovery code to a new AWS SDK #15572
  • k8s.io/api might be big as well. Not sure if its worth to have to full kubernetes client on board for fetching only pods, services, endpoints. (approx. 28MB)
  • Strip debug symbols saves up to 30MB (-ldflags "-w -s")
  • go-size-analyzer has a diff mode. It can be integrated into CI have the awareness of new dependency sizes. Example
go run github.com/Zxilly/go-size-analyzer/cmd/gsa@latest prometheus prometheus.debug
┌────────────────────────────────────────────────────────────────────────────┐
│ Diff between prometheus and prometheus.debug                               │
├─────────┬──────────────────────────────────┬──────────┬──────────┬─────────┤
│ PERCENT │ NAME                             │ OLD SIZE │ NEW SIZE │ DIFF    │
├─────────┼──────────────────────────────────┼──────────┼──────────┼─────────┤
│ +100%   │ github.com/shurcooL/httpfs       │          │ 14 kB    │ +14 kB  │
│ +0.00%  │ runtime                          │ 1.1 MB   │ 1.1 MB   │ +5 B    │
│ -0.01%  │ <autogenerated>                  │ 1.9 MB   │ 1.9 MB   │ -288 B  │
│ -0.14%  │ text/template                    │ 231 kB   │ 230 kB   │ -325 B  │
│ -22.60% │ embed                            │ 10 kB    │ 7.9 kB   │ -2.3 kB │
│ -0.46%  │ net                              │ 1.5 MB   │ 1.5 MB   │ -7.0 kB │
│ -4.44%  │ github.com/prometheus/common     │ 209 kB   │ 199 kB   │ -9.3 kB │
│ -42.38% │ github.com/prometheus/prometheus │ 8.1 MB   │ 4.7 MB   │ -3.4 MB │
├─────────┼──────────────────────────────────┼──────────┼──────────┼─────────┤
│ +0.04%  │ .debug_line                      │ 4.7 MB   │ 4.7 MB   │ +2.1 kB │
│ +0.01%  │ .debug_info                      │ 12 MB    │ 12 MB    │ +719 B  │
│ +0.03%  │ .debug_ranges                    │ 1.6 MB   │ 1.6 MB   │ +515 B  │
│ +0.00%  │ .strtab                          │ 13 MB    │ 13 MB    │ +394 B  │
│ +0.00%  │ .rodata                          │ 24 MB    │ 24 MB    │ +22 B   │
│ +0.08%  │ .go.buildinfo                    │ 19 kB    │ 19 kB    │ +16 B   │
│ +0.02%  │ .itablink                        │ 47 kB    │ 47 kB    │ +8 B    │
│ +0.00%  │ .typelink                        │ 224 kB   │ 224 kB   │ +4 B    │
│ -0.00%  │ .symtab                          │ 4.1 MB   │ 4.1 MB   │ -72 B   │
│ -0.07%  │ .data                            │ 225 kB   │ 224 kB   │ -152 B  │
│ -0.08%  │ .debug_frame                     │ 1.5 MB   │ 1.5 MB   │ -1.1 kB │
│ -0.29%  │ .debug_loc                       │ 7.7 MB   │ 7.6 MB   │ -22 kB  │
├─────────┼──────────────────────────────────┼──────────┼──────────┼─────────┤
│ -2.33%  │ prometheus                       │ 150 MB   │ 146 MB   │ -3.5 MB │
│         │ prometheus.debug                 │          │          │         │
└─────────┴──────────────────────────────────┴──────────┴──────────┴─────────┘

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions