summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2011-05-29 15:17:29 +0200
committerantirez <antirez@gmail.com>2011-06-08 23:20:11 +0200
commit27c8f84c66e23fafc8964ed2d9e51d708e27ab3d (patch)
tree05cfa6e02024562299158f3c7edb6565725add2c
parent32463852bea9d1ce35093a2673fc582b49373f7a (diff)
downloadredis-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.c5
-rw-r--r--src/rdb.c3
-rw-r--r--src/redis.c3
-rw-r--r--src/redis.h1
-rw-r--r--src/util.c1
5 files changed, 12 insertions, 1 deletions
diff --git a/src/aof.c b/src/aof.c
index 9b571b95a..e7d6894bb 100644
--- a/src/aof.c
+++ b/src/aof.c
@@ -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",
diff --git a/src/rdb.c b/src/rdb.c
index 893aeb846..3ecdf4f66 100644
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -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"