Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
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
Show 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