Commit 615e414c authored by antirez's avatar antirez
Browse files

INFO now contains the time (in usecs) needed to fork() in order to persist....

INFO now contains the time (in usecs) needed to fork() in order to persist. The info is available in the stats section of INFO.
parent 43222f25
...@@ -565,16 +565,18 @@ werr: ...@@ -565,16 +565,18 @@ werr:
*/ */
int rewriteAppendOnlyFileBackground(void) { int rewriteAppendOnlyFileBackground(void) {
pid_t childpid; pid_t childpid;
long long start;
if (server.bgrewritechildpid != -1) return REDIS_ERR; if (server.bgrewritechildpid != -1) return REDIS_ERR;
if (server.ds_enabled != 0) { if (server.ds_enabled != 0) {
redisLog(REDIS_WARNING,"BGREWRITEAOF called with diskstore enabled: AOF is not supported when diskstore is enabled. Operation not performed."); redisLog(REDIS_WARNING,"BGREWRITEAOF called with diskstore enabled: AOF is not supported when diskstore is enabled. Operation not performed.");
return REDIS_ERR; return REDIS_ERR;
} }
start = ustime();
if ((childpid = fork()) == 0) { if ((childpid = fork()) == 0) {
/* Child */
char tmpfile[256]; char tmpfile[256];
/* Child */
if (server.ipfd > 0) close(server.ipfd); if (server.ipfd > 0) close(server.ipfd);
if (server.sofd > 0) close(server.sofd); if (server.sofd > 0) close(server.sofd);
snprintf(tmpfile,256,"temp-rewriteaof-bg-%d.aof", (int) getpid()); snprintf(tmpfile,256,"temp-rewriteaof-bg-%d.aof", (int) getpid());
...@@ -585,6 +587,7 @@ int rewriteAppendOnlyFileBackground(void) { ...@@ -585,6 +587,7 @@ int rewriteAppendOnlyFileBackground(void) {
} }
} else { } else {
/* Parent */ /* Parent */
server.stat_fork_time = ustime()-start;
if (childpid == -1) { if (childpid == -1) {
redisLog(REDIS_WARNING, redisLog(REDIS_WARNING,
"Can't rewrite append only file in background: fork: %s", "Can't rewrite append only file in background: fork: %s",
......
...@@ -482,6 +482,7 @@ werr: ...@@ -482,6 +482,7 @@ werr:
int rdbSaveBackground(char *filename) { int rdbSaveBackground(char *filename) {
pid_t childpid; pid_t childpid;
long long start;
if (server.bgsavechildpid != -1 || if (server.bgsavechildpid != -1 ||
server.bgsavethread != (pthread_t) -1) return REDIS_ERR; server.bgsavethread != (pthread_t) -1) return REDIS_ERR;
...@@ -493,6 +494,7 @@ int rdbSaveBackground(char *filename) { ...@@ -493,6 +494,7 @@ int rdbSaveBackground(char *filename) {
return dsRdbSaveBackground(filename); return dsRdbSaveBackground(filename);
} }
start = ustime();
if ((childpid = fork()) == 0) { if ((childpid = fork()) == 0) {
int retval; int retval;
...@@ -503,6 +505,7 @@ int rdbSaveBackground(char *filename) { ...@@ -503,6 +505,7 @@ int rdbSaveBackground(char *filename) {
_exit((retval == REDIS_OK) ? 0 : 1); _exit((retval == REDIS_OK) ? 0 : 1);
} else { } else {
/* Parent */ /* Parent */
server.stat_fork_time = ustime()-start;
if (childpid == -1) { if (childpid == -1) {
redisLog(REDIS_WARNING,"Can't save in background: fork: %s", redisLog(REDIS_WARNING,"Can't save in background: fork: %s",
strerror(errno)); strerror(errno));
......
...@@ -964,6 +964,7 @@ void initServer() { ...@@ -964,6 +964,7 @@ void initServer() {
server.stat_keyspace_misses = 0; server.stat_keyspace_misses = 0;
server.stat_keyspace_hits = 0; server.stat_keyspace_hits = 0;
server.stat_peak_memory = 0; server.stat_peak_memory = 0;
server.stat_fork_time = 0;
server.unixtime = time(NULL); server.unixtime = time(NULL);
aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL); aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL);
if (server.ipfd > 0 && aeCreateFileEvent(server.el,server.ipfd,AE_READABLE, if (server.ipfd > 0 && aeCreateFileEvent(server.el,server.ipfd,AE_READABLE,
...@@ -1439,7 +1440,8 @@ sds genRedisInfoString(char *section) { ...@@ -1439,7 +1440,8 @@ sds genRedisInfoString(char *section) {
"keyspace_hits:%lld\r\n" "keyspace_hits:%lld\r\n"
"keyspace_misses:%lld\r\n" "keyspace_misses:%lld\r\n"
"pubsub_channels:%ld\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_numconnections,
server.stat_numcommands, server.stat_numcommands,
server.stat_expiredkeys, server.stat_expiredkeys,
...@@ -1447,7 +1449,8 @@ sds genRedisInfoString(char *section) { ...@@ -1447,7 +1449,8 @@ sds genRedisInfoString(char *section) {
server.stat_keyspace_hits, server.stat_keyspace_hits,
server.stat_keyspace_misses, server.stat_keyspace_misses,
dictSize(server.pubsub_channels), dictSize(server.pubsub_channels),
listLength(server.pubsub_patterns)); listLength(server.pubsub_patterns),
server.stat_fork_time);
} }
/* Replication */ /* Replication */
......
...@@ -547,6 +547,7 @@ struct redisServer { ...@@ -547,6 +547,7 @@ struct redisServer {
long long stat_keyspace_hits; /* number of successful lookups of keys */ long long stat_keyspace_hits; /* number of successful lookups of keys */
long long stat_keyspace_misses; /* number of failed lookups of keys */ long long stat_keyspace_misses; /* number of failed lookups of keys */
size_t stat_peak_memory; /* max used memory record */ size_t stat_peak_memory; /* max used memory record */
long long stat_fork_time; /* time needed to perform latets fork() */
/* Configuration */ /* Configuration */
int verbosity; int verbosity;
int maxidletime; int maxidletime;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment