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
67a1810b
Commit
67a1810b
authored
Jan 09, 2011
by
antirez
Browse files
allocation stats in INFO
parent
7cca366b
Changes
3
Show whitespace changes
Inline
Side-by-side
src/redis.c
View file @
67a1810b
...
@@ -1300,6 +1300,19 @@ sds genRedisInfoString(void) {
...
@@ -1300,6 +1300,19 @@ sds genRedisInfoString(void) {
eta
eta
);
);
}
}
info
=
sdscat
(
info
,
"allocation_stats:"
);
for
(
j
=
0
;
j
<=
ZMALLOC_MAX_ALLOC_STAT
;
j
++
)
{
size_t
count
=
zmalloc_allocations_for_size
(
j
);
if
(
count
)
{
if
(
info
[
sdslen
(
info
)
-
1
]
!=
':'
)
info
=
sdscatlen
(
info
,
","
,
1
);
info
=
sdscatprintf
(
info
,
"%s%d=%zu"
,
(
j
==
ZMALLOC_MAX_ALLOC_STAT
)
?
">="
:
""
,
j
,
count
);
}
}
info
=
sdscat
(
info
,
"
\r\n
"
);
for
(
j
=
0
;
j
<
server
.
dbnum
;
j
++
)
{
for
(
j
=
0
;
j
<
server
.
dbnum
;
j
++
)
{
long
long
keys
,
vkeys
;
long
long
keys
,
vkeys
;
...
...
src/zmalloc.c
View file @
67a1810b
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
#include <string.h>
#include <string.h>
#include <pthread.h>
#include <pthread.h>
#include "config.h"
#include "config.h"
#include "zmalloc.h"
#ifdef HAVE_MALLOC_SIZE
#ifdef HAVE_MALLOC_SIZE
#define PREFIX_SIZE (0)
#define PREFIX_SIZE (0)
...
@@ -52,19 +53,22 @@
...
@@ -52,19 +53,22 @@
#define free(ptr) tc_free(ptr)
#define free(ptr) tc_free(ptr)
#endif
#endif
#define
increment_used_memory(__n
) do { \
#define
update_zmalloc_stat_alloc(__n,__size
) do { \
size_t _n = (__n); \
size_t _n = (__n); \
size_t _stat_slot = (__size < ZMALLOC_MAX_ALLOC_STAT) ? __size : ZMALLOC_MAX_ALLOC_STAT; \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (zmalloc_thread_safe) { \
if (zmalloc_thread_safe) { \
pthread_mutex_lock(&used_memory_mutex); \
pthread_mutex_lock(&used_memory_mutex); \
used_memory += _n; \
used_memory += _n; \
zmalloc_allocations[_stat_slot]++; \
pthread_mutex_unlock(&used_memory_mutex); \
pthread_mutex_unlock(&used_memory_mutex); \
} else { \
} else { \
used_memory += _n; \
used_memory += _n; \
zmalloc_allocations[_stat_slot]++; \
} \
} \
} while(0)
} while(0)
#define
decrement_used_memory
(__n) do { \
#define
update_zmalloc_stat_free
(__n) do { \
size_t _n = (__n); \
size_t _n = (__n); \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (zmalloc_thread_safe) { \
if (zmalloc_thread_safe) { \
...
@@ -79,6 +83,8 @@
...
@@ -79,6 +83,8 @@
static
size_t
used_memory
=
0
;
static
size_t
used_memory
=
0
;
static
int
zmalloc_thread_safe
=
0
;
static
int
zmalloc_thread_safe
=
0
;
pthread_mutex_t
used_memory_mutex
=
PTHREAD_MUTEX_INITIALIZER
;
pthread_mutex_t
used_memory_mutex
=
PTHREAD_MUTEX_INITIALIZER
;
/* Note that malloc_allocations elements are initialized to zero by C */
size_t
zmalloc_allocations
[
ZMALLOC_MAX_ALLOC_STAT
+
1
];
static
void
zmalloc_oom
(
size_t
size
)
{
static
void
zmalloc_oom
(
size_t
size
)
{
fprintf
(
stderr
,
"zmalloc: Out of memory trying to allocate %zu bytes
\n
"
,
fprintf
(
stderr
,
"zmalloc: Out of memory trying to allocate %zu bytes
\n
"
,
...
@@ -92,11 +98,11 @@ void *zmalloc(size_t size) {
...
@@ -92,11 +98,11 @@ void *zmalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
#ifdef HAVE_MALLOC_SIZE
increment_used_memory
(
redis_malloc_size
(
ptr
));
update_zmalloc_stat_alloc
(
redis_malloc_size
(
ptr
)
,
size
);
return
ptr
;
return
ptr
;
#else
#else
*
((
size_t
*
)
ptr
)
=
size
;
*
((
size_t
*
)
ptr
)
=
size
;
increment_used_memory
(
size
+
PREFIX_SIZE
);
update_zmalloc_stat_alloc
(
size
+
PREFIX_SIZE
,
size
);
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
#endif
}
}
...
@@ -106,11 +112,11 @@ void *zcalloc(size_t size) {
...
@@ -106,11 +112,11 @@ void *zcalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
#ifdef HAVE_MALLOC_SIZE
increment_used_memory
(
redis_malloc_size
(
ptr
));
update_zmalloc_stat_alloc
(
redis_malloc_size
(
ptr
)
,
size
);
return
ptr
;
return
ptr
;
#else
#else
*
((
size_t
*
)
ptr
)
=
size
;
*
((
size_t
*
)
ptr
)
=
size
;
increment_used_memory
(
size
+
PREFIX_SIZE
);
update_zmalloc_stat_alloc
(
size
+
PREFIX_SIZE
,
size
);
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
#endif
}
}
...
@@ -128,8 +134,8 @@ void *zrealloc(void *ptr, size_t size) {
...
@@ -128,8 +134,8 @@ void *zrealloc(void *ptr, size_t size) {
newptr
=
realloc
(
ptr
,
size
);
newptr
=
realloc
(
ptr
,
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
decrement_used_memory
(
oldsize
);
update_zmalloc_stat_free
(
oldsize
);
increment_used_memory
(
redis_malloc_size
(
newptr
));
update_zmalloc_stat_alloc
(
redis_malloc_size
(
newptr
)
,
size
);
return
newptr
;
return
newptr
;
#else
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
...
@@ -138,8 +144,8 @@ void *zrealloc(void *ptr, size_t size) {
...
@@ -138,8 +144,8 @@ void *zrealloc(void *ptr, size_t size) {
if
(
!
newptr
)
zmalloc_oom
(
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
*
((
size_t
*
)
newptr
)
=
size
;
*
((
size_t
*
)
newptr
)
=
size
;
decrement_used_memory
(
oldsize
);
update_zmalloc_stat_free
(
oldsize
);
increment_used_memory
(
size
);
update_zmalloc_stat_alloc
(
size
,
size
);
return
(
char
*
)
newptr
+
PREFIX_SIZE
;
return
(
char
*
)
newptr
+
PREFIX_SIZE
;
#endif
#endif
}
}
...
@@ -152,12 +158,12 @@ void zfree(void *ptr) {
...
@@ -152,12 +158,12 @@ void zfree(void *ptr) {
if
(
ptr
==
NULL
)
return
;
if
(
ptr
==
NULL
)
return
;
#ifdef HAVE_MALLOC_SIZE
#ifdef HAVE_MALLOC_SIZE
decrement_used_memory
(
redis_malloc_size
(
ptr
));
update_zmalloc_stat_free
(
redis_malloc_size
(
ptr
));
free
(
ptr
);
free
(
ptr
);
#else
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
oldsize
=
*
((
size_t
*
)
realptr
);
oldsize
=
*
((
size_t
*
)
realptr
);
decrement_used_memory
(
oldsize
+
PREFIX_SIZE
);
update_zmalloc_stat_free
(
oldsize
+
PREFIX_SIZE
);
free
(
realptr
);
free
(
realptr
);
#endif
#endif
}
}
...
@@ -179,6 +185,11 @@ size_t zmalloc_used_memory(void) {
...
@@ -179,6 +185,11 @@ size_t zmalloc_used_memory(void) {
return
um
;
return
um
;
}
}
size_t
zmalloc_allocations_for_size
(
size_t
size
)
{
if
(
size
>
ZMALLOC_MAX_ALLOC_STAT
||
size
<
0
)
return
0
;
return
zmalloc_allocations
[
size
];
}
void
zmalloc_enable_thread_safeness
(
void
)
{
void
zmalloc_enable_thread_safeness
(
void
)
{
zmalloc_thread_safe
=
1
;
zmalloc_thread_safe
=
1
;
}
}
...
...
src/zmalloc.h
View file @
67a1810b
...
@@ -40,5 +40,8 @@ size_t zmalloc_used_memory(void);
...
@@ -40,5 +40,8 @@ size_t zmalloc_used_memory(void);
void
zmalloc_enable_thread_safeness
(
void
);
void
zmalloc_enable_thread_safeness
(
void
);
float
zmalloc_get_fragmentation_ratio
(
void
);
float
zmalloc_get_fragmentation_ratio
(
void
);
size_t
zmalloc_get_rss
(
void
);
size_t
zmalloc_get_rss
(
void
);
size_t
zmalloc_allocations_for_size
(
size_t
size
);
#define ZMALLOC_MAX_ALLOC_STAT 256
#endif
/* _ZMALLOC_H */
#endif
/* _ZMALLOC_H */
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