#jemalloc #introspection #control-api #platform #jemalloc-allocator #tikv-jemallocator

no-std tikv-jemalloc-ctl

A safe wrapper over jemalloc's control and introspection APIs

6 releases

0.6.0 Jul 14, 2024
0.5.4 Jul 27, 2023
0.5.0 May 24, 2022
0.4.2 Aug 9, 2021
0.4.0 Jul 21, 2020

#303 in Memory management

Download history 157875/week @ 2024-11-30 270853/week @ 2024-12-07 208602/week @ 2024-12-14 59090/week @ 2024-12-21 106547/week @ 2024-12-28 229137/week @ 2025-01-04 280669/week @ 2025-01-11 201249/week @ 2025-01-18 227362/week @ 2025-01-25 240851/week @ 2025-02-01 332936/week @ 2025-02-08 316315/week @ 2025-02-15 373745/week @ 2025-02-22 397523/week @ 2025-03-01 443945/week @ 2025-03-08 589336/week @ 2025-03-15

1,873,016 downloads per month
Used in 93 crates (17 directly)

MIT/Apache

2MB
52K SLoC

C 47K SLoC // 0.1% comments Rust 2K SLoC // 0.0% comments Visual Studio Project 1.5K SLoC M4 658 SLoC // 0.1% comments Shell 380 SLoC // 0.3% comments C++ 371 SLoC // 0.1% comments Python 261 SLoC // 0.3% comments Visual Studio Solution 125 SLoC XSL 9 SLoC

jemalloc-ctl

Travis-CI Status Latest Version docs

A safe wrapper over jemalloc's mallctl*() control and introspection APIs.

Documentation

Platform support

Supported on all platforms supported by the tikv-jemallocator crate.

Example


use std::thread;
use std::time::Duration;
use tikv_jemalloc_ctl::{stats, epoch};

#[global_allocator]
static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;

fn main() {
    // Obtain a MIB for the `epoch`, `stats.allocated`, and
    // `atats.resident` keys:
    let e = epoch::mib().unwrap();
    let allocated = stats::allocated::mib().unwrap();
    let resident = stats::resident::mib().unwrap();
    
    loop {
        // Many statistics are cached and only updated 
        // when the epoch is advanced:
        e.advance().unwrap();
        
        // Read statistics using MIB key:
        let allocated = allocated.read().unwrap();
        let resident = resident.read().unwrap();
        println!("{} bytes allocated/{} bytes resident", allocated, resident);
        thread::sleep(Duration::from_secs(10));
    }
}

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in jemalloc-ctl by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies