Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
7d98e08c
Commit
7d98e08c
authored
Jan 06, 2010
by
antirez
Browse files
VM stats in INFO command
parent
f870935d
Changes
2
Hide whitespace changes
Inline
Side-by-side
redis.c
View file @
7d98e08c
...
@@ -381,6 +381,11 @@ struct redisServer {
...
@@ -381,6 +381,11 @@ struct redisServer {
off_t vm_near_pages; /* Number of pages allocated sequentially */
off_t vm_near_pages; /* Number of pages allocated sequentially */
unsigned char *vm_bitmap; /* Bitmap of free/used pages */
unsigned char *vm_bitmap; /* Bitmap of free/used pages */
time_t unixtime; /* Unix time sampled every second. */
time_t unixtime; /* Unix time sampled every second. */
/* Virtual memory stats */
unsigned long long vm_stats_used_pages;
unsigned long long vm_stats_swapped_objects;
unsigned long long vm_stats_swapouts;
unsigned long long vm_stats_swapins;
};
};
typedef void redisCommandProc(redisClient *c);
typedef void redisCommandProc(redisClient *c);
...
@@ -2382,6 +2387,7 @@ static void decrRefCount(void *obj) {
...
@@ -2382,6 +2387,7 @@ static void decrRefCount(void *obj) {
if (listLength(server.objfreelist) > REDIS_OBJFREELIST_MAX ||
if (listLength(server.objfreelist) > REDIS_OBJFREELIST_MAX ||
!listAddNodeHead(server.objfreelist,o))
!listAddNodeHead(server.objfreelist,o))
zfree(o);
zfree(o);
server.vm_stats_swapped_objects--;
return;
return;
}
}
/* REDIS_VM_MEMORY */
/* REDIS_VM_MEMORY */
...
@@ -5417,6 +5423,7 @@ static sds genRedisInfoString(void) {
...
@@ -5417,6 +5423,7 @@ static sds genRedisInfoString(void) {
"bgrewriteaof_in_progress:%d\r\n"
"bgrewriteaof_in_progress:%d\r\n"
"total_connections_received:%lld\r\n"
"total_connections_received:%lld\r\n"
"total_commands_processed:%lld\r\n"
"total_commands_processed:%lld\r\n"
"vm_enabled:%d\r\n"
"role:%s\r\n"
"role:%s\r\n"
,REDIS_VERSION,
,REDIS_VERSION,
(sizeof(long) == 8) ? "64" : "32",
(sizeof(long) == 8) ? "64" : "32",
...
@@ -5433,6 +5440,7 @@ static sds genRedisInfoString(void) {
...
@@ -5433,6 +5440,7 @@ static sds genRedisInfoString(void) {
server.bgrewritechildpid != -1,
server.bgrewritechildpid != -1,
server.stat_numconnections,
server.stat_numconnections,
server.stat_numcommands,
server.stat_numcommands,
server.vm_enabled != 0,
server.masterhost == NULL ? "master" : "slave"
server.masterhost == NULL ? "master" : "slave"
);
);
if (server.masterhost) {
if (server.masterhost) {
...
@@ -5448,6 +5456,24 @@ static sds genRedisInfoString(void) {
...
@@ -5448,6 +5456,24 @@ static sds genRedisInfoString(void) {
server.master ? ((int)(time(NULL)-server.master->lastinteraction)) : -1
server.master ? ((int)(time(NULL)-server.master->lastinteraction)) : -1
);
);
}
}
if (server.vm_enabled) {
info = sdscatprintf(info,
"vm_conf_max_memory:%llu\r\n"
"vm_conf_page_size:%llu\r\n"
"vm_conf_pages:%llu\r\n"
"vm_stats_used_pages:%llu\r\n"
"vm_stats_swapped_objects:%llu\r\n"
"vm_stats_swappin_count:%llu\r\n"
"vm_stats_swappout_count:%llu\r\n"
,(unsigned long long) server.vm_max_memory,
(unsigned long long) server.vm_page_size,
(unsigned long long) server.vm_pages,
(unsigned long long) server.vm_stats_used_pages,
(unsigned long long) server.vm_stats_swapped_objects,
(unsigned long long) server.vm_stats_swapins,
(unsigned long long) server.vm_stats_swapouts
);
}
for (j = 0; j < server.dbnum; j++) {
for (j = 0; j < server.dbnum; j++) {
long long keys, vkeys;
long long keys, vkeys;
...
@@ -6734,6 +6760,10 @@ static void vmInit(void) {
...
@@ -6734,6 +6760,10 @@ static void vmInit(void) {
server.vm_fd = fileno(server.vm_fp);
server.vm_fd = fileno(server.vm_fp);
server.vm_next_page = 0;
server.vm_next_page = 0;
server.vm_near_pages = 0;
server.vm_near_pages = 0;
server.vm_stats_used_pages = 0;
server.vm_stats_swapped_objects = 0;
server.vm_stats_swapouts = 0;
server.vm_stats_swapins = 0;
totsize = server.vm_pages*server.vm_page_size;
totsize = server.vm_pages*server.vm_page_size;
redisLog(REDIS_NOTICE,"Allocating %lld bytes of swap file",totsize);
redisLog(REDIS_NOTICE,"Allocating %lld bytes of swap file",totsize);
if (ftruncate(server.vm_fd,totsize) == -1) {
if (ftruncate(server.vm_fd,totsize) == -1) {
...
@@ -6767,6 +6797,7 @@ static void vmMarkPagesUsed(off_t page, off_t count) {
...
@@ -6767,6 +6797,7 @@ static void vmMarkPagesUsed(off_t page, off_t count) {
for (j = 0; j < count; j++)
for (j = 0; j < count; j++)
vmMarkPageUsed(page+j);
vmMarkPageUsed(page+j);
server.vm_stats_used_pages += count;
}
}
/* Mark the page as free */
/* Mark the page as free */
...
@@ -6782,6 +6813,7 @@ static void vmMarkPagesFree(off_t page, off_t count) {
...
@@ -6782,6 +6813,7 @@ static void vmMarkPagesFree(off_t page, off_t count) {
for (j = 0; j < count; j++)
for (j = 0; j < count; j++)
vmMarkPageFree(page+j);
vmMarkPageFree(page+j);
server.vm_stats_used_pages -= count;
}
}
/* Test if the page is free */
/* Test if the page is free */
...
@@ -6891,6 +6923,8 @@ static int vmSwapObject(robj *key, robj *val) {
...
@@ -6891,6 +6923,8 @@ static int vmSwapObject(robj *key, robj *val) {
redisLog(REDIS_DEBUG,"VM: object %s swapped out at %lld (%lld pages)",
redisLog(REDIS_DEBUG,"VM: object %s swapped out at %lld (%lld pages)",
(unsigned char*) key->ptr,
(unsigned char*) key->ptr,
(unsigned long long) page, (unsigned long long) pages);
(unsigned long long) page, (unsigned long long) pages);
server.vm_stats_swapped_objects++;
server.vm_stats_swapouts++;
return REDIS_OK;
return REDIS_OK;
}
}
...
@@ -6920,7 +6954,9 @@ static robj *vmGenericLoadObject(robj *key, int preview) {
...
@@ -6920,7 +6954,9 @@ static robj *vmGenericLoadObject(robj *key, int preview) {
vmMarkPagesFree(key->vm.page,key->vm.usedpages);
vmMarkPagesFree(key->vm.page,key->vm.usedpages);
redisLog(REDIS_DEBUG, "VM: object %s loaded from disk",
redisLog(REDIS_DEBUG, "VM: object %s loaded from disk",
(unsigned char*) key->ptr);
(unsigned char*) key->ptr);
server.vm_stats_swapped_objects--;
}
}
server.vm_stats_swapins++;
return val;
return val;
}
}
...
...
redis.conf
View file @
7d98e08c
...
@@ -24,7 +24,7 @@ timeout 300
...
@@ -24,7 +24,7 @@ timeout 300
# debug (a lot of information, useful for development/testing)
# debug (a lot of information, useful for development/testing)
# notice (moderately verbose, what you want in production probably)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
# warning (only very important / critical messages are logged)
loglevel
verbose
loglevel
debug
# Specify the log file name. Also 'stdout' can be used to force
# Specify the log file name. Also 'stdout' can be used to force
# the demon to log on the standard output. Note that if you use standard
# the demon to log on the standard output. Note that if you use standard
...
@@ -205,7 +205,8 @@ vm-page-size 256
...
@@ -205,7 +205,8 @@ vm-page-size 256
#
#
# With the default of 256-bytes memory pages and 104857600 pages Redis will
# With the default of 256-bytes memory pages and 104857600 pages Redis will
# use a 25 GB swap file, that will use rougly 13 MB of RAM for the page table.
# use a 25 GB swap file, that will use rougly 13 MB of RAM for the page table.
vm
-
pages
104857600
# vm-pages 104857600
vm
-
pages
1000000
############################### ADVANCED CONFIG ###############################
############################### ADVANCED CONFIG ###############################
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment