Skip to content

Commit d33b9e4

Browse files
committed
Fix RSS not dropping after delete_project: add mem_collect + immediate purge
- delete_project now calls cbm_mem_collect() after closing the database to return freed pages to OS immediately - Set purge_delay=0 (was 1000ms) so mimalloc purges freed pages without delay - Set purge_decommits=1 explicitly so macOS uses MADV_FREE_REUSABLE (immediate RSS accounting) instead of MADV_FREE (lazy, RSS stays high) Before: deleting Linux kernel index left 8.1G RSS (2.1G dirty pages) After: dirty pages purged immediately, RSS reflects actual usage
1 parent d3aa98e commit d33b9e4

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

src/foundation/mem.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,12 @@ void cbm_mem_init(double ram_fraction) {
116116
ram_fraction = DEFAULT_RAM_FRACTION;
117117
}
118118

119-
/* Reduce upfront memory: don't eagerly commit arenas */
119+
/* Reduce upfront memory: don't eagerly commit arenas.
120+
* Force decommit on purge (MADV_FREE_REUSABLE on macOS) so RSS
121+
* drops immediately instead of staying high until memory pressure. */
120122
mi_option_set(mi_option_arena_eager_commit, 0);
123+
mi_option_set(mi_option_purge_decommits, SKIP_ONE);
124+
mi_option_set(mi_option_purge_delay, 0); /* immediate purge, no 1s delay */
121125

122126
cbm_system_info_t info = cbm_system_info();
123127
g_budget = (size_t)((double)info.total_ram * ram_fraction);

src/mcp/mcp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,6 +1554,7 @@ static char *handle_delete_project(cbm_mcp_server_t *srv, const char *args) {
15541554
}
15551555

15561556
cbm_pipeline_unlock();
1557+
cbm_mem_collect(); /* return freed pages to OS after closing database */
15571558

15581559
yyjson_mut_doc *doc = yyjson_mut_doc_new(NULL);
15591560
yyjson_mut_val *root = yyjson_mut_obj(doc);

0 commit comments

Comments
 (0)