update sys free
This commit is contained in:
parent
1dc5ea40f3
commit
87012bf98e
@ -432,7 +432,8 @@ int getMaxmemoryState(size_t *total, size_t *logical, size_t *tofree, float *lev
|
|||||||
size_t min_free_mem = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_total * free_mem_ratio);
|
size_t min_free_mem = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_total * free_mem_ratio);
|
||||||
sys_free_mem_buffer = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_free - min_free_mem);
|
sys_free_mem_buffer = static_cast<size_t>(g_pserver->cron_malloc_stats.sys_free - min_free_mem);
|
||||||
if (sys_free_mem_buffer < 0) {
|
if (sys_free_mem_buffer < 0) {
|
||||||
maxmemory = static_cast<size_t>(mem_reported + sys_free_mem_buffer);
|
size_t mem_threshold = static_cast<size_t>(mem_reported + sys_free_mem_buffer);
|
||||||
|
maxmemory = (maxmemory < mem_threshold) ? maxmemory : mem_threshold;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -621,6 +622,18 @@ static unsigned long evictionTimeLimitUs() {
|
|||||||
return ULONG_MAX; /* No limit to eviction time */
|
return ULONG_MAX; /* No limit to eviction time */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateSysFreeMemory() {
|
||||||
|
#ifdef __linux__
|
||||||
|
if (g_pserver->force_eviction_percent) {
|
||||||
|
struct sysinfo sysinf;
|
||||||
|
memset(&sysinf, 0, sizeof sysinf);
|
||||||
|
if (!sysinfo(&sysinf)) {
|
||||||
|
g_pserver->cron_malloc_stats.sys_free = static_cast<size_t>(sysinf.freeram);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* Check that memory usage is within the current "maxmemory" limit. If over
|
/* Check that memory usage is within the current "maxmemory" limit. If over
|
||||||
* "maxmemory", attempt to free memory by evicting data (if it's safe to do so).
|
* "maxmemory", attempt to free memory by evicting data (if it's safe to do so).
|
||||||
*
|
*
|
||||||
@ -844,6 +857,7 @@ int performEvictions(bool fPreSnapshot) {
|
|||||||
* across the dbAsyncDelete() call, while the thread can
|
* across the dbAsyncDelete() call, while the thread can
|
||||||
* release the memory all the time. */
|
* release the memory all the time. */
|
||||||
if (g_pserver->lazyfree_lazy_eviction) {
|
if (g_pserver->lazyfree_lazy_eviction) {
|
||||||
|
updateSysFreeMemory();
|
||||||
if (getMaxmemoryState(NULL,NULL,NULL,NULL) == C_OK) {
|
if (getMaxmemoryState(NULL,NULL,NULL,NULL) == C_OK) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -874,6 +888,10 @@ int performEvictions(bool fPreSnapshot) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cant_free:
|
cant_free:
|
||||||
|
if (mem_freed > 0) {
|
||||||
|
updateSysFreeMemory();
|
||||||
|
}
|
||||||
|
|
||||||
if (g_pserver->m_pstorageFactory)
|
if (g_pserver->m_pstorageFactory)
|
||||||
{
|
{
|
||||||
if (mem_reported < g_pserver->maxmemory*1.2) {
|
if (mem_reported < g_pserver->maxmemory*1.2) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user