The lib crashes on get_max_value("memory.max") like values (the backtrace is provided as follows).
The /proc/<pic>/cgroup of the process contains only 1 line:
0::/
The MVP
use procfs::{Meminfo, ProcError};
use cgroups_rs::memory::MemController;
use cgroups_rs::*;
pub fn flush_memory_usage() {
let container_total = cgroup_node_mem_total()
.map_err(|e| {
println!("flush_memory_usage cgroup_node_mem_total: {}", e);
})
.unwrap_or_default();
println!("container total mem: {}", container_total);
}
pub fn cgroup_node_mem_total() -> Result<u64, ProcError> {
// Acquire a handle for the cgroup hierarchy.
let hier = cgroups_rs::hierarchies::auto();
let cg = Cgroup::load(hier, String::from(""));
let mc: &MemController = cg.controller_of().unwrap();
Ok(mc.memory_stat().stat.hierarchical_memory_limit as u64)
}
fn main() {
flush_memory_usage();
}
The full log:
xxx@fancybox:~/workspace/cgtest$ RUST_BACKTRACE=1 cargo r
Compiling cgtest v0.1.0 (/home/xueruini/workspace/cgtest)
Finished dev [unoptimized + debuginfo] target(s) in 1.21s
Running `target/debug/cgtest`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { kind: ReadFailed("/sys/fs/cgroup/memory.high"), cause: Some(Os { code: 2, kind: NotFound, message: "No such file or directory" }) }', /home/xxxx/.cargo/registry/src/rsproxy.cn-8f6827c7555bfaf8/cgroups-rs-0.3.2/src/memory.rs:587:34
stack backtrace:
0: rust_begin_unwind
at /rustc/9eb3afe9ebe9c7d2b84b71002d44f4a0edac95e0/library/std/src/panicking.rs:575:5
1: core::panicking::panic_fmt
at /rustc/9eb3afe9ebe9c7d2b84b71002d44f4a0edac95e0/library/core/src/panicking.rs:64:14
2: core::result::unwrap_failed
at /rustc/9eb3afe9ebe9c7d2b84b71002d44f4a0edac95e0/library/core/src/result.rs:1790:5
3: core::result::Result<T,E>::unwrap
at /rustc/9eb3afe9ebe9c7d2b84b71002d44f4a0edac95e0/library/core/src/result.rs:1112:23
4: cgroups_rs::memory::MemController::memory_stat_v2
at /home/xxx/.cargo/registry/src/rsproxy.cn-8f6827c7555bfaf8/cgroups-rs-0.3.2/src/memory.rs:587:19
5: cgroups_rs::memory::MemController::memory_stat
at /home/xxx/.cargo/registry/src/rsproxy.cn-8f6827c7555bfaf8/cgroups-rs-0.3.2/src/memory.rs:621:20
6: cgtest::cgroup_node_mem_total
at ./src/main.rs:23:16
7: cgtest::flush_memory_usage
at ./src/main.rs:6:27
8: cgtest::main
at ./src/main.rs:27:2
9: core::ops::function::FnOnce::call_once
at /rustc/9eb3afe9ebe9c7d2b84b71002d44f4a0edac95e0/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Expected behaviorget_mem() should return as expected instead of panic.
Additional context
I tried this on various environments, including wsl2+ubuntu 20.04, wsl2+ubuntu 22.04, VirtualBox 7.0 + ubuntu 22.04.
Describe the bug
The lib crashes on
get_max_value("memory.max")
like values (the backtrace is provided as follows).The
/proc/<pic>/cgroup
of the process contains only 1 line:The MVP
The full log:
Expected behavior
get_mem()
should return as expected instead of panic.Additional context
I tried this on various environments, including wsl2+ubuntu 20.04, wsl2+ubuntu 22.04, VirtualBox 7.0 + ubuntu 22.04.