]> git.saurik.com Git - redis.git/commitdiff
INFO now contains the time (in usecs) needed to fork() in order to persist. The info...
authorantirez <antirez@gmail.com>
Sun, 29 May 2011 13:17:29 +0000 (15:17 +0200)
committerantirez <antirez@gmail.com>
Sun, 29 May 2011 13:17:29 +0000 (15:17 +0200)
src/aof.c
src/rdb.c
src/redis.c
src/redis.h

index ef72a2b169a007387179e5d24d4830fcbb50e047..cd409a0b376d85d2df9bdc6e583abd8e3b6aacb9 100644 (file)
--- a/src/aof.c
+++ b/src/aof.c
@@ -565,16 +565,18 @@ werr:
  */
 int rewriteAppendOnlyFileBackground(void) {
     pid_t childpid;
+    long long start;
 
     if (server.bgrewritechildpid != -1) return REDIS_ERR;
     if (server.ds_enabled != 0) {
         redisLog(REDIS_WARNING,"BGREWRITEAOF called with diskstore enabled: AOF is not supported when diskstore is enabled. Operation not performed.");
         return REDIS_ERR;
     }
+    start = ustime();
     if ((childpid = fork()) == 0) {
-        /* Child */
         char tmpfile[256];
 
+        /* Child */
         if (server.ipfd > 0) close(server.ipfd);
         if (server.sofd > 0) close(server.sofd);
         snprintf(tmpfile,256,"temp-rewriteaof-bg-%d.aof", (int) getpid());
@@ -585,6 +587,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",
index eeafc053d30fbbcf4471ee935f3b562cfb6a28b6..0d4940d264e5fe55828e760d16b40970c19e7ee6 100644 (file)
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -482,6 +482,7 @@ werr:
 
 int rdbSaveBackground(char *filename) {
     pid_t childpid;
+    long long start;
 
     if (server.bgsavechildpid != -1 ||
         server.bgsavethread != (pthread_t) -1) return REDIS_ERR;
@@ -493,6 +494,7 @@ int rdbSaveBackground(char *filename) {
         return dsRdbSaveBackground(filename);
     }
 
+    start = ustime();
     if ((childpid = fork()) == 0) {
         int retval;
 
@@ -503,6 +505,7 @@ int rdbSaveBackground(char *filename) {
         _exit((retval == REDIS_OK) ? 0 : 1);
     } else {
         /* Parent */
+        server.stat_fork_time = ustime()-start;
         if (childpid == -1) {
             redisLog(REDIS_WARNING,"Can't save in background: fork: %s",
                 strerror(errno));
index f64a2d344f284dbed8063b7976c9a6ebd57a2ac5..a494e1f752736d708a04e260c7dd630db20998e0 100644 (file)
@@ -964,6 +964,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,
@@ -1439,7 +1440,8 @@ sds genRedisInfoString(char *section) {
             "keyspace_hits:%lld\r\n"
             "keyspace_misses:%lld\r\n"
             "pubsub_channels:%ld\r\n"
-            "pubsub_patterns:%u\r\n",
+            "pubsub_patterns:%u\r\n"
+            "latest_fork_usec:%lld\r\n",
             server.stat_numconnections,
             server.stat_numcommands,
             server.stat_expiredkeys,
@@ -1447,7 +1449,8 @@ sds genRedisInfoString(char *section) {
             server.stat_keyspace_hits,
             server.stat_keyspace_misses,
             dictSize(server.pubsub_channels),
-            listLength(server.pubsub_patterns));
+            listLength(server.pubsub_patterns),
+            server.stat_fork_time);
     }
 
     /* Replication */
index f249d2377a9aa53bd69b95d8ff6b46df6a5b74b7..089a30422ffeacbf170a430e76d08f450a94d951 100644 (file)
@@ -547,6 +547,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;