summaryrefslogtreecommitdiff
path: root/src/config.c
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2019-05-30 12:51:32 +0300
committerOran Agra <oran@redislabs.com>2019-06-02 15:33:14 +0300
commit09f99c2a925a0351985e799c106614082d6053cf (patch)
tree7fe3fe8c7fa499a70111fb6ce18dae37a95e3977 /src/config.c
parent2fec7d9c6c630db3bcb13a07a08c39404abad447 (diff)
downloadredis-09f99c2a925a0351985e799c106614082d6053cf.tar.gz
make redis purge jemalloc after flush, and enable background purging thread
jemalloc 5 doesn't immediately release memory back to the OS, instead there's a decaying mechanism, which doesn't work when there's no traffic (no allocations). this is most evident if there's no traffic after flushdb, the RSS will remain high. 1) enable jemalloc background purging 2) explicitly purge in flushdb
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c
index 7f0e9af89..16850a1fc 100644
--- a/src/config.c
+++ b/src/config.c
@@ -474,6 +474,10 @@ void loadServerConfigFromString(char *config) {
err = "active defrag can't be enabled without proper jemalloc support"; goto loaderr;
#endif
}
+ } else if (!strcasecmp(argv[0],"jemalloc-bg-thread") && argc == 2) {
+ if ((server.jemalloc_bg_thread = yesnotoi(argv[1])) == -1) {
+ err = "argument must be 'yes' or 'no'"; goto loaderr;
+ }
} else if (!strcasecmp(argv[0],"daemonize") && argc == 2) {
if ((server.daemonize = yesnotoi(argv[1])) == -1) {
err = "argument must be 'yes' or 'no'"; goto loaderr;
@@ -1153,6 +1157,9 @@ void configSetCommand(client *c) {
}
#endif
} config_set_bool_field(
+ "jemalloc-bg-thread",server.jemalloc_bg_thread) {
+ set_jemalloc_bg_thread(server.jemalloc_bg_thread);
+ } config_set_bool_field(
"protected-mode",server.protected_mode) {
} config_set_bool_field(
"gopher-enabled",server.gopher_enabled) {
@@ -1487,6 +1494,7 @@ void configGetCommand(client *c) {
config_get_bool_field("rdbchecksum", server.rdb_checksum);
config_get_bool_field("activerehashing", server.activerehashing);
config_get_bool_field("activedefrag", server.active_defrag_enabled);
+ config_get_bool_field("jemalloc-bg-thread", server.jemalloc_bg_thread);
config_get_bool_field("protected-mode", server.protected_mode);
config_get_bool_field("gopher-enabled", server.gopher_enabled);
config_get_bool_field("io-threads-do-reads", server.io_threads_do_reads);
@@ -2318,6 +2326,7 @@ int rewriteConfig(char *path) {
rewriteConfigNumericalOption(state,"hll-sparse-max-bytes",server.hll_sparse_max_bytes,CONFIG_DEFAULT_HLL_SPARSE_MAX_BYTES);
rewriteConfigYesNoOption(state,"activerehashing",server.activerehashing,CONFIG_DEFAULT_ACTIVE_REHASHING);
rewriteConfigYesNoOption(state,"activedefrag",server.active_defrag_enabled,CONFIG_DEFAULT_ACTIVE_DEFRAG);
+ rewriteConfigYesNoOption(state,"jemalloc-bg-thread",server.jemalloc_bg_thread,1);
rewriteConfigYesNoOption(state,"protected-mode",server.protected_mode,CONFIG_DEFAULT_PROTECTED_MODE);
rewriteConfigYesNoOption(state,"gopher-enabled",server.gopher_enabled,CONFIG_DEFAULT_GOPHER_ENABLED);
rewriteConfigYesNoOption(state,"io-threads-do-reads",server.io_threads_do_reads,CONFIG_DEFAULT_IO_THREADS_DO_READS);