This commit is contained in:
Alex Cope 2023-06-29 13:22:47 -07:00 committed by Malavan Sotheeswaran
parent 39e3141a0a
commit c9d63c50c0
3 changed files with 11 additions and 11 deletions

View File

@ -425,16 +425,14 @@ int getMaxmemoryState(size_t *total, size_t *logical, size_t *tofree, float *lev
if (g_pserver->FRdbSaveInProgress()) if (g_pserver->FRdbSaveInProgress())
maxmemory = static_cast<size_t>(maxmemory*1.2); maxmemory = static_cast<size_t>(maxmemory*1.2);
/* If rss memory exceeds configurable percent of system memory, force eviction */ /* If free system memory is below a certain threshold, force eviction */
bool mem_rss_max_exceeded; size_t sys_free_mem_buffer;
if (g_pserver->force_eviction_percent && g_pserver->cron_malloc_stats.sys_total) { if (g_pserver->force_eviction_percent && g_pserver->cron_malloc_stats.sys_total) {
float sys_total_ratio = (float)(g_pserver->force_eviction_percent)/100; float free_mem_ratio = (float)(100 - g_pserver->force_eviction_percent)/100;
size_t mem_rss_max = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_total * sys_total_ratio); size_t min_free_mem = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_total * free_mem_ratio);
mem_rss_max_exceeded = g_pserver->cron_malloc_stats.process_rss > mem_rss_max; sys_free_mem_buffer = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_free - min_free_mem);
if (mem_rss_max_exceeded) { if (sys_free_mem_buffer < 0) {
/* This will always set maxmemory < mem_reported */ maxmemory = static_cast<size_t>(mem_reported + sys_free_mem_buffer);
float frag_ratio = (float)g_pserver->cron_malloc_stats.process_rss / (float)mem_reported;
maxmemory = static_cast<size_t>((float)mem_rss_max / frag_ratio);
} }
} }
@ -448,9 +446,9 @@ int getMaxmemoryState(size_t *total, size_t *logical, size_t *tofree, float *lev
size_t overhead = freeMemoryGetNotCountedMemory(); size_t overhead = freeMemoryGetNotCountedMemory();
mem_used = (mem_used > overhead) ? mem_used-overhead : 0; mem_used = (mem_used > overhead) ? mem_used-overhead : 0;
/* If we've exceeded max RSS memory, we want to force evictions no matter /* If system free memory is too low, we want to force evictions no matter
* what so we also offset the overhead from maxmemory. */ * what so we also offset the overhead from maxmemory. */
if (mem_rss_max_exceeded) { if (sys_free_mem_buffer < 0) {
maxmemory = (maxmemory > overhead) ? maxmemory-overhead : 0; maxmemory = (maxmemory > overhead) ? maxmemory-overhead : 0;
} }

View File

@ -2319,6 +2319,7 @@ void cronUpdateMemoryStats() {
memset(&sysinf, 0, sizeof sysinf); memset(&sysinf, 0, sizeof sysinf);
if (!sysinfo(&sysinf)) { if (!sysinfo(&sysinf)) {
g_pserver->cron_malloc_stats.sys_total = static_cast<size_t>(sysinf.totalram); g_pserver->cron_malloc_stats.sys_total = static_cast<size_t>(sysinf.totalram);
g_pserver->cron_malloc_stats.sys_free = static_cast<size_t>(sysinf.freeram);
} }
#endif #endif

View File

@ -2015,6 +2015,7 @@ struct malloc_stats {
size_t allocator_active; size_t allocator_active;
size_t allocator_resident; size_t allocator_resident;
size_t sys_total; size_t sys_total;
size_t sys_free;
}; };
typedef struct socketFds { typedef struct socketFds {