No Description

Richard Crowley a31ebf206b Use time.Ticker to avoid bajillions of threads. 14 years ago
cmd a31ebf206b Use time.Ticker to avoid bajillions of threads. 14 years ago
.gitignore 0818b952c0 Removed a binary. 14 years ago
LICENSE f7cf4d7405 Initial import. 14 years ago
Makefile 1f505b2fae Crude memory usage benchmarks. 14 years ago
README.md a31ebf206b Use time.Ticker to avoid bajillions of threads. 14 years ago
counter.go 9192d930ec Use atomics for counters and gauges. 14 years ago
counter_test.go c80bdded90 Tests cribbed from Coda. 14 years ago
ewma.go c4c8b6cbd3 Consistent variable declarations. 14 years ago
ewma_test.go 7272529a65 Added meters and exponentially-weighted moving averages. 14 years ago
gauge.go 9192d930ec Use atomics for counters and gauges. 14 years ago
gauge_test.go c80bdded90 Tests cribbed from Coda. 14 years ago
healthcheck.go f7cf4d7405 Initial import. 14 years ago
histogram.go 42de9db64b Percentiles are zero in empty histograms. 14 years ago
histogram_test.go c80bdded90 Tests cribbed from Coda. 14 years ago
log.go 0f101b213d Added Log and Syslog functions that print metrics. 14 years ago
meter.go a31ebf206b Use time.Ticker to avoid bajillions of threads. 14 years ago
meter_test.go 7272529a65 Added meters and exponentially-weighted moving averages. 14 years ago
metrics.go f7cf4d7405 Initial import. 14 years ago
registry.go 0f101b213d Added Log and Syslog functions that print metrics. 14 years ago
sample.go f068d88f36 Correct timestamp usage in exponential decay. 14 years ago
sample_test.go c80bdded90 Tests cribbed from Coda. 14 years ago
syslog.go 0f101b213d Added Log and Syslog functions that print metrics. 14 years ago
timer.go f7cf4d7405 Initial import. 14 years ago

README.md

go-metrics

TODO This code is not safe on 32-bit architectures.

Memory usage

(Highly unscientific.)

Command used to gather static memory usage:

grep ^Vm "/proc/$(ps fax | grep [m]etrics-bench | awk '{print $1}')/status"

Program used to gather baseline memory usage:

package main

import "time"

func main() {
	time.Sleep(600e9)
}

Baseline:

VmPeak:    42604 kB
VmSize:    42604 kB
VmLck:         0 kB
VmHWM:      1120 kB
VmRSS:      1120 kB
VmData:    35460 kB
VmStk:       136 kB
VmExe:      1020 kB
VmLib:      1848 kB
VmPTE:        36 kB
VmSwap:        0 kB

Program used to gather metric memory usage (with other metrics being similar):

package main

import (
	"fmt"
	"metrics"
	"time"
)

func main() {
	fmt.Sprintf("foo")
	metrics.NewRegistry()
	time.Sleep(600e9)
}

1000 counters registered:

VmPeak:    44016 kB
VmSize:    44016 kB
VmLck:         0 kB
VmHWM:      1928 kB
VmRSS:      1928 kB
VmData:    36868 kB
VmStk:       136 kB
VmExe:      1024 kB
VmLib:      1848 kB
VmPTE:        40 kB
VmSwap:        0 kB

1.412 kB virtual, TODO 0.808 kB resident per counter.

100000 counters registered:

VmPeak:    55024 kB
VmSize:    55024 kB
VmLck:         0 kB
VmHWM:     12440 kB
VmRSS:     12440 kB
VmData:    47876 kB
VmStk:       136 kB
VmExe:      1024 kB
VmLib:      1848 kB
VmPTE:        64 kB
VmSwap:        0 kB

0.1242 kB virtual, 0.1132 kB resident per counter.

1000 gauges registered:

VmPeak:    44012 kB
VmSize:    44012 kB
VmLck:         0 kB
VmHWM:      1928 kB
VmRSS:      1928 kB
VmData:    36868 kB
VmStk:       136 kB
VmExe:      1020 kB
VmLib:      1848 kB
VmPTE:        40 kB
VmSwap:        0 kB

1.408 kB virtual, 0.808 kB resident per counter.

100000 gauges registered:

VmPeak:    55020 kB
VmSize:    55020 kB
VmLck:         0 kB
VmHWM:     12432 kB
VmRSS:     12432 kB
VmData:    47876 kB
VmStk:       136 kB
VmExe:      1020 kB
VmLib:      1848 kB
VmPTE:        60 kB
VmSwap:        0 kB

0.12416 kB virtual, 0.11312 resident per gauge.

1000 histograms with a uniform sample size of 1028:

VmPeak:    72272 kB
VmSize:    72272 kB
VmLck:         0 kB
VmHWM:     16204 kB
VmRSS:     16204 kB
VmData:    65100 kB
VmStk:       136 kB
VmExe:      1048 kB
VmLib:      1848 kB
VmPTE:        80 kB
VmSwap:        0 kB

29.668 kB virtual, TODO 15.084 resident per histogram.

10000 histograms with a uniform sample size of 1028:

VmPeak:   256912 kB
VmSize:   256912 kB
VmLck:         0 kB
VmHWM:    146204 kB
VmRSS:    146204 kB
VmData:   249740 kB
VmStk:       136 kB
VmExe:      1048 kB
VmLib:      1848 kB
VmPTE:       448 kB
VmSwap:        0 kB

21.4308 kB virtual, 14.5084 kB resident per histogram.

50000 histograms with a uniform sample size of 1028:

VmPeak:   908112 kB
VmSize:   908112 kB
VmLck:         0 kB
VmHWM:    645832 kB
VmRSS:    645588 kB
VmData:   900940 kB
VmStk:       136 kB
VmExe:      1048 kB
VmLib:      1848 kB
VmPTE:      1716 kB
VmSwap:     1544 kB

17.31016 kB virtual, 12.88936 kB resident per histogram.

1000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015:

VmPeak:    62480 kB
VmSize:    62480 kB
VmLck:         0 kB
VmHWM:     11572 kB
VmRSS:     11572 kB
VmData:    55308 kB
VmStk:       136 kB
VmExe:      1048 kB
VmLib:      1848 kB
VmPTE:        64 kB
VmSwap:        0 kB

19.876 kB virtual, 10.452 kB resident per histogram.

10000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015:

VmPeak:   153296 kB
VmSize:   153296 kB
VmLck:         0 kB
VmHWM:    101176 kB
VmRSS:    101176 kB
VmData:   146124 kB
VmStk:       136 kB
VmExe:      1048 kB
VmLib:      1848 kB
VmPTE:       240 kB
VmSwap:        0 kB

11.0692 kB virtual, 10.0056 kB resident per histogram.

50000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015:

VmPeak:   557264 kB
VmSize:   557264 kB
VmLck:         0 kB
VmHWM:    501056 kB
VmRSS:    501056 kB
VmData:   550092 kB
VmStk:       136 kB
VmExe:      1048 kB
VmLib:      1848 kB
VmPTE:      1032 kB
VmSwap:        0 kB

10.2932 kB virtual, 9.99872 kB resident per histogram.

1000 meters:

VmPeak:    84876 kB
VmSize:    84876 kB
VmLck:         0 kB
VmHWM:     25992 kB
VmRSS:     25992 kB
VmData:    77712 kB
VmStk:       136 kB
VmExe:      1040 kB
VmLib:      1848 kB
VmPTE:        96 kB
VmSwap:        0 kB

42.272 kB virtual, 24.872 kB resident per meter.

10000 meters:

VmPeak:   306956 kB
VmSize:   306956 kB
VmLck:         0 kB
VmHWM:    245788 kB
VmRSS:    245788 kB
VmData:   299792 kB
VmStk:       136 kB
VmExe:      1040 kB
VmLib:      1848 kB
VmPTE:       532 kB
VmSwap:        0 kB

26.4352 kB virtual, 24.4668 kB resident per meter.