Encontré un alto uso de memoria (parece una pérdida de memoria) en el entorno de producción (contenedor en k8s) y quiero verificar si se debe al comportamiento "MADV_FREE".
¿Hay alguna forma de cambiar para usar MADV_DONTNEED en lugar de MADV_FREE en rust?
Rust permite anular el asignador predeterminado con el atributo #[global_allocator]
struct MyAllocator; unsafe impl GlobalAlloc for MyAllocator { unsafe fn alloc(&self, layout: Layout) -> *mut u8 { System.alloc(layout) } unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { System.dealloc(ptr, layout) } } #[global_allocator] static GLOBAL: MyAllocator = MyAllocator;Puede usar esto para cambiar el comportamiento de la desasignación según sus necesidades.
O posiblemente use una caja existente que implemente asignadores que registren las asignaciones/desasignaciones, como rastreador-asignador o registro-asignador .
#[global_allocator] static GLOBAL: tracing_allocator::Allocator = tracing_allocator::Allocator{}; fn main() { let f = File::create("trace.txt").unwrap(); tracing_allocator::Allocator::initialize(&f); tracing_allocator::Allocator::activate(); }(No tengo experiencia con estas cajas, así que no tengo idea de qué usan para las asignaciones)