prometheus/storage/local
beorn7 434ab2a6a3 storage: Evict chunks and calculate persistence pressure based on target heap size
This is a fairly easy attempt to dynamically evict chunks based on the
heap size. A target heap size has to be set as a command line flage,
so that users can essentially say "utilize 4GiB of RAM, and please
don't OOM".

The -storage.local.max-chunks-to-persist and
-storage.local.memory-chunks flags are deprecated by this
change. Backwards compatibility is provided by ignoring
-storage.local.max-chunks-to-persist and use
-storage.local.memory-chunks to set the new
-storage.local.target-heap-size to a reasonable (and conservative)
value (both with a warning).

This also makes the metrics intstrumentation more consistent (in
naming and implementation) and cleans up a few quirks in the tests.

Answers to anticipated comments:

There is a chance that Go 1.9 will allow programs better control over
the Go memory management. I don't expect those changes to be in
contradiction with the approach here, but I do expect them to
complement them and allow them to be more precise and controlled. In
any case, once those Go changes are available, this code has to be
revisted.

One might be tempted to let the user specify an estimated value for
the RSS usage, and then internall set a target heap size of a certain
fraction of that. (In my experience, 2/3 is a fairly safe bet.)
However, investigations have shown that RSS size and its relation to
the heap size is really really complicated. It depends on so many
factors that I wouldn't even start listing them in a commit
description. It depends on many circumstances and not at least on the
risk trade-off of each individual user between RAM utilization and
probability of OOMing during a RAM usage peak. To not add even more to
the confusion, we need to stick to the well-defined number we also use
in the targeting here, the sum of the sizes of heap objects.
2017-03-27 14:33:50 +02:00
..
chunk storage: Evict chunks and calculate persistence pressure based on target heap size 2017-03-27 14:33:50 +02:00
codable
fixtures/b0
index
storagetool Make version informations consistent between prometheus components 2016-05-05 22:33:18 +02:00
crashrecovery.go Fix possible memory leak by defer inside loop 2016-11-14 14:08:08 +09:00
heads.go storage: Test for errors returned by MaybePopulateLastTime 2017-02-01 23:43:58 +01:00
instrumentation.go storage: separate chunk package, publish more names 2016-09-26 13:25:11 +02:00
interface.go storage: enhance Querier interface usage 2016-10-16 10:39:29 +02:00
locker.go Avoid having contended mutexes on same cacheline 2016-09-18 23:32:55 +01:00
locker_test.go Add missing license headers 2016-04-13 16:08:22 +02:00
mapper.go Checkpoint fingerprint mappings only upon shutdown 2016-04-15 01:03:28 +02:00
mapper_test.go Checkpoint fingerprint mappings only upon shutdown 2016-04-15 01:03:28 +02:00
noop_storage.go storage: Make tests go-vet and golint clean 2016-12-13 17:07:27 +01:00
persistence.go storage: Fix chunkIndexToStartSeek calculation 2017-02-10 11:42:59 +01:00
persistence_test.go storage: Evict chunks and calculate persistence pressure based on target heap size 2017-03-27 14:33:50 +02:00
series.go storage: Use staleness delta as head chunk timeout 2017-03-26 23:44:50 +02:00
series_test.go Unpublish accidentally published series methods 2016-10-03 00:04:56 +02:00
storage.go storage: Evict chunks and calculate persistence pressure based on target heap size 2017-03-27 14:33:50 +02:00
storage_test.go storage: Evict chunks and calculate persistence pressure based on target heap size 2017-03-27 14:33:50 +02:00
test_helpers.go storage: Evict chunks and calculate persistence pressure based on target heap size 2017-03-27 14:33:50 +02:00