diff options
author | antirez <antirez@gmail.com> | 2011-05-29 15:17:29 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2011-06-08 23:20:11 +0200 |
commit | 27c8f84c66e23fafc8964ed2d9e51d708e27ab3d (patch) | |
tree | 05cfa6e02024562299158f3c7edb6565725add2c | |
parent | 32463852bea9d1ce35093a2673fc582b49373f7a (diff) | |
download | redis-27c8f84c66e23fafc8964ed2d9e51d708e27ab3d.tar.gz |
INFO now contains the time (in usecs) needed to fork() in order to persist. The info is available in the stats section of INFO.
-rw-r--r-- | src/aof.c | 5 | ||||
-rw-r--r-- | src/rdb.c | 3 | ||||
-rw-r--r-- | src/redis.c | 3 | ||||
-rw-r--r-- | src/redis.h | 1 | ||||
-rw-r--r-- | src/util.c | 1 |
5 files changed, 12 insertions, 1 deletions
@@ -589,13 +589,15 @@ werr: */ int rewriteAppendOnlyFileBackground(void) { pid_t childpid; + long long start; if (server.bgrewritechildpid != -1) return REDIS_ERR; if (server.vm_enabled) waitEmptyIOJobsQueue(); + start = ustime(); if ((childpid = fork()) == 0) { - /* Child */ char tmpfile[256]; + /* Child */ if (server.vm_enabled) vmReopenSwapFile(); if (server.ipfd > 0) close(server.ipfd); if (server.sofd > 0) close(server.sofd); @@ -607,6 +609,7 @@ int rewriteAppendOnlyFileBackground(void) { } } else { /* Parent */ + server.stat_fork_time = ustime()-start; if (childpid == -1) { redisLog(REDIS_WARNING, "Can't rewrite append only file in background: fork: %s", @@ -498,10 +498,12 @@ werr: int rdbSaveBackground(char *filename) { pid_t childpid; + long long start; if (server.bgsavechildpid != -1) return REDIS_ERR; if (server.vm_enabled) waitEmptyIOJobsQueue(); server.dirty_before_bgsave = server.dirty; + start = ustime(); if ((childpid = fork()) == 0) { /* Child */ if (server.vm_enabled) vmReopenSwapFile(); @@ -514,6 +516,7 @@ int rdbSaveBackground(char *filename) { } } else { /* Parent */ + server.stat_fork_time = ustime()-start; if (childpid == -1) { redisLog(REDIS_WARNING,"Can't save in background: fork: %s", strerror(errno)); diff --git a/src/redis.c b/src/redis.c index 954eca112..004027384 100644 --- a/src/redis.c +++ b/src/redis.c @@ -909,6 +909,7 @@ void initServer() { server.stat_keyspace_misses = 0; server.stat_keyspace_hits = 0; server.stat_peak_memory = 0; + server.stat_fork_time = 0; server.unixtime = time(NULL); aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL); if (server.ipfd > 0 && aeCreateFileEvent(server.el,server.ipfd,AE_READABLE, @@ -1207,6 +1208,7 @@ sds genRedisInfoString(void) { "hash_max_zipmap_value:%zu\r\n" "pubsub_channels:%ld\r\n" "pubsub_patterns:%u\r\n" + "latest_fork_usec:%lld\r\n" "vm_enabled:%d\r\n" "role:%s\r\n" ,REDIS_VERSION, @@ -1249,6 +1251,7 @@ sds genRedisInfoString(void) { server.hash_max_zipmap_value, dictSize(server.pubsub_channels), listLength(server.pubsub_patterns), + server.stat_fork_time, server.vm_enabled != 0, server.masterhost == NULL ? "master" : "slave" ); diff --git a/src/redis.h b/src/redis.h index af118a543..365b839ff 100644 --- a/src/redis.h +++ b/src/redis.h @@ -401,6 +401,7 @@ struct redisServer { long long stat_keyspace_hits; /* number of successful lookups of keys */ long long stat_keyspace_misses; /* number of failed lookups of keys */ size_t stat_peak_memory; /* max used memory record */ + long long stat_fork_time; /* time needed to perform latets fork() */ /* Configuration */ int verbosity; int maxidletime; diff --git a/src/util.c b/src/util.c index e34b3a004..24af9fed2 100644 --- a/src/util.c +++ b/src/util.c @@ -5,6 +5,7 @@ #include <ctype.h> #include <limits.h> #include <math.h> +#include <sys/time.h> #include "util.h" |