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
67a1810b
Commit
67a1810b
authored
Jan 09, 2011
by
antirez
Browse files
allocation stats in INFO
parent
7cca366b
Changes
3
Hide 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