memory_worker_correct_memory_tracker
memory_worker_decay_adjustment_period_ms
dirty_decay_ms 之前,内存压力必须持续的时长 (以毫秒为单位) 。当内存使用量在这段时间内持续高于清理阈值时,会禁用自动脏页衰减 (dirty_decay_ms=0) ,以更积极地回收内存。当内存使用量在这段时间内持续低于该阈值时,则恢复默认的衰减行为。将其设为 0 可禁用动态调整,并使用 jemalloc 的默认衰减设置。
memory_worker_dynamic_hard_limit
(常驻内存 + system available memory) * max_server_memory_usage_to_ram_ratio 周期性地重新计算服务器的硬内存限制,从而为同一主机上运行的其他进程预留余量。
禁用后,max_server_memory_usage_to_ram_ratio 只会像先前版本一样,在启动时和重新加载配置时以静态方式限制硬内存限制。
当 max_server_memory_usage_to_ram_ratio 为 0 时,此设置不起作用。
memory_worker_period_ms
memory_worker_purge_dirty_pages_threshold_ratio
memory_worker_purge_total_memory_threshold_ratio
memory_worker_rss_speculative_reserve_ratio
MemoryWorker tick 时,除了观测到的 RSS 外,还会额外预留
ratio * min(resident - previous_resident, resident - tracked),
其依据是假设下一个 tick 的增长幅度可能与上一个 tick 相同
(resident - previous_resident 表示上一个 tick 期间 RSS 的增长量) 。该增长
以上限 resident - tracked 为准,也就是全局内存跟踪器不可见的那部分 RSS,
因为已经被跟踪的增长会由常规的硬限制检查处理。该预留
会应用到全局硬限制检查通过 MemoryTracker::allocImpl 查询的 rss
计数器上,因此当推算值超过 max_server_memory_usage 时,后续内存分配会抛出
MEMORY_LIMIT_EXCEEDED,先于内核 OOM-killer 触发。值为 0
时会禁用这种推测机制 (回退为 rss = resident) ;默认值 1
会为下一个时间间隔额外预留一个完整增长 delta 的余量。在
sanitizers (ASan、UBSan、MSan、TSan) 下,默认值为 0,因为
resident - tracked 的 gap 主要来自 sanitizer 的 shadow / runtime overhead,
而不是 tracker bookkeeping 的 lag。