prop/rust/prop_grid_rs/Cargo.toml
Graham McIntire 641789449a
fix(prop-grid-rs): switch global allocator to jemalloc
Pods were OOMKilled at :05 every hour at the 3 GiB cgroup limit.
Idle RSS climbed 750 MiB → 1.5 GiB across pod lifetime as the
hourly f00 analysis cycled surface + pressure + native-duct blobs
(50 MB / 400 MB / 530 MB) simultaneously during decode. glibc
malloc retains dirty pages after freeing those large transient
allocations, so RSS drifted upward with each cycle and the next
hourly peak eventually crossed the limit.

jemalloc's background decay returns pages to the kernel on a
short schedule, so RSS tracks the actual working set. Wired in
at lib.rs so both `worker` and `hrrr_point_worker` inherit it.
Skipped on MSVC targets (Windows CI if we ever add one); dev
builds on macOS still pick it up via the generic target_env
gate.
2026-04-22 08:52:24 -05:00

61 lines
1.9 KiB
TOML

[package]
name = "prop_grid_rs"
version = "0.1.0"
edition = "2021"
publish = false
[lib]
name = "prop_grid_rs"
path = "src/lib.rs"
[[bin]]
name = "worker"
path = "src/bin/worker.rs"
[[bin]]
name = "hrrr_point_worker"
path = "src/bin/hrrr_point_worker.rs"
[dependencies]
tokio = { version = "1", features = ["full"] }
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono", "macros", "json"] }
reqwest = { version = "0.12", features = ["rustls-tls", "stream"], default-features = false }
bytes = "1"
anyhow = "1"
thiserror = "2"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
tracing-opentelemetry = "0.32"
opentelemetry = "0.31"
opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"] }
opentelemetry-otlp = { version = "0.31", default-features = false, features = ["grpc-tonic", "trace"] }
chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1", features = ["v4", "serde"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bincode = "1.3"
num_cpus = "1"
byteorder = "1"
futures = "0.3"
rayon = "1.10"
axum = { version = "0.7", default-features = false, features = ["http1", "tokio"] }
prometheus = { version = "0.13", default-features = false }
png = "0.17"
rmp-serde = "1.3"
rmpv = { version = "1.3", features = ["with-serde"] }
flate2 = "1"
# glibc malloc retains most dirty pages after large transient
# allocations, so RSS drifted from ~500 MiB at boot to ~1.5 GiB
# after a few hourly f00 analysis cycles and tripped the 3 GiB
# cgroup limit. jemalloc returns pages to the kernel on a short
# decay schedule, so RSS follows actual working set and survives
# the hourly peak (surface + pressure + native-duct blobs held
# simultaneously during decode).
[target.'cfg(not(target_env = "msvc"))'.dependencies]
tikv-jemallocator = "0.6"
[dev-dependencies]
tokio = { version = "1", features = ["full", "test-util"] }
pretty_assertions = "1"
tempfile = "3"