memory-budget
Adaptive process-memory budgeting for applications with bounded caches.
memory-budget coordinates caches and other memory reporters under a target
resident-set size. It samples process RSS, applies a pluggable policy, and
adjusts registered cache ceilings. A Tokio task can drive the periodic ticks;
the policy itself is synchronous and deterministic, which keeps it easy to
test.
Core model
Resizableis the small contract implemented by an adjustable cache.NonCacheReporteraccounts for memory that cannot be resized by the budget.MemoryBudgetowns weak registrations, leases, RSS sampling, and ticks.Policydecides new cache ceilings from the latest bounded snapshot.RssSourceandJemallocStatsSourceisolate platform and allocator data.
The budget does not own cache entries, queue work, or payloads. It only coordinates the explicit byte measurements supplied by its participants.
Example
use Arc;
use ;
async
#
# ;
#
Environment configuration
BudgetConfig::from_env reads these variables:
| Variable | Meaning |
|---|---|
MEMORY_BUDGET_TARGET_MIB |
Soft RSS target; otherwise derived from system RAM |
MEMORY_BUDGET_TICK_SECS |
Tick interval, default 5 seconds |
MEMORY_BUDGET_HARD_CEILING_MIB |
Optional hard process ceiling |
Use BudgetConfig::new when configuration must be supplied explicitly.
Optional jemalloc support
Enable the jemalloc feature to expose SystemJemallocStats backed by
tikv-jemalloc-ctl. The heap-profiling feature adds threshold-driven
prof.dump diagnostics for applications built with jemalloc profiling.
License
Licensed under either of:
- Apache License, Version 2.0
- MIT License
at your option.