update
This commit is contained in:
parent
39e3141a0a
commit
c9d63c50c0
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user