Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hanoi2005
redis
提交
67a1810b
R
redis
项目概览
hanoi2005
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
67a1810b
编写于
1月 09, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
allocation stats in INFO
上级
7cca366b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
39 addition
and
12 deletion
+39
-12
src/redis.c
src/redis.c
+13
-0
src/zmalloc.c
src/zmalloc.c
+23
-12
src/zmalloc.h
src/zmalloc.h
+3
-0
未找到文件。
src/redis.c
浏览文件 @
67a1810b
...
...
@@ -1300,6 +1300,19 @@ sds genRedisInfoString(void) {
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
++
)
{
long
long
keys
,
vkeys
;
...
...
src/zmalloc.c
浏览文件 @
67a1810b
...
...
@@ -33,6 +33,7 @@
#include <string.h>
#include <pthread.h>
#include "config.h"
#include "zmalloc.h"
#ifdef HAVE_MALLOC_SIZE
#define PREFIX_SIZE (0)
...
...
@@ -52,19 +53,22 @@
#define free(ptr) tc_free(ptr)
#endif
#define
increment_used_memory(__n
) do { \
#define
update_zmalloc_stat_alloc(__n,__size
) do { \
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 (zmalloc_thread_safe) { \
pthread_mutex_lock(&used_memory_mutex); \
used_memory += _n; \
zmalloc_allocations[_stat_slot]++; \
pthread_mutex_unlock(&used_memory_mutex); \
} else { \
used_memory += _n; \
zmalloc_allocations[_stat_slot]++; \
} \
} while(0)
#define
decrement_used_memory
(__n) do { \
#define
update_zmalloc_stat_free
(__n) do { \
size_t _n = (__n); \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (zmalloc_thread_safe) { \
...
...
@@ -79,6 +83,8 @@
static
size_t
used_memory
=
0
;
static
int
zmalloc_thread_safe
=
0
;
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
)
{
fprintf
(
stderr
,
"zmalloc: Out of memory trying to allocate %zu bytes
\n
"
,
...
...
@@ -92,11 +98,11 @@ void *zmalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
increment_used_memory
(
redis_malloc_size
(
ptr
)
);
update_zmalloc_stat_alloc
(
redis_malloc_size
(
ptr
),
size
);
return
ptr
;
#else
*
((
size_t
*
)
ptr
)
=
size
;
increment_used_memory
(
size
+
PREFIX_SIZE
);
update_zmalloc_stat_alloc
(
size
+
PREFIX_SIZE
,
size
);
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
}
...
...
@@ -106,11 +112,11 @@ void *zcalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
increment_used_memory
(
redis_malloc_size
(
ptr
)
);
update_zmalloc_stat_alloc
(
redis_malloc_size
(
ptr
),
size
);
return
ptr
;
#else
*
((
size_t
*
)
ptr
)
=
size
;
increment_used_memory
(
size
+
PREFIX_SIZE
);
update_zmalloc_stat_alloc
(
size
+
PREFIX_SIZE
,
size
);
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
}
...
...
@@ -128,8 +134,8 @@ void *zrealloc(void *ptr, size_t size) {
newptr
=
realloc
(
ptr
,
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
decrement_used_memory
(
oldsize
);
increment_used_memory
(
redis_malloc_size
(
newptr
)
);
update_zmalloc_stat_free
(
oldsize
);
update_zmalloc_stat_alloc
(
redis_malloc_size
(
newptr
),
size
);
return
newptr
;
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
...
...
@@ -138,8 +144,8 @@ void *zrealloc(void *ptr, size_t size) {
if
(
!
newptr
)
zmalloc_oom
(
size
);
*
((
size_t
*
)
newptr
)
=
size
;
decrement_used_memory
(
oldsize
);
increment_used_memory
(
size
);
update_zmalloc_stat_free
(
oldsize
);
update_zmalloc_stat_alloc
(
size
,
size
);
return
(
char
*
)
newptr
+
PREFIX_SIZE
;
#endif
}
...
...
@@ -152,12 +158,12 @@ void zfree(void *ptr) {
if
(
ptr
==
NULL
)
return
;
#ifdef HAVE_MALLOC_SIZE
decrement_used_memory
(
redis_malloc_size
(
ptr
));
update_zmalloc_stat_free
(
redis_malloc_size
(
ptr
));
free
(
ptr
);
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
oldsize
=
*
((
size_t
*
)
realptr
);
decrement_used_memory
(
oldsize
+
PREFIX_SIZE
);
update_zmalloc_stat_free
(
oldsize
+
PREFIX_SIZE
);
free
(
realptr
);
#endif
}
...
...
@@ -179,6 +185,11 @@ size_t zmalloc_used_memory(void) {
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
)
{
zmalloc_thread_safe
=
1
;
}
...
...
src/zmalloc.h
浏览文件 @
67a1810b
...
...
@@ -40,5 +40,8 @@ size_t zmalloc_used_memory(void);
void
zmalloc_enable_thread_safeness
(
void
);
float
zmalloc_get_fragmentation_ratio
(
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 */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录