在全局注册一个接口,发生内存OOM时用于回调,具体实现由业务测关注。
1 处理器接口
c1 2
| static void (*zmalloc_oom_handler)(size_t) = zmalloc_default_oom;
|
2 默认处理器
c1 2 3 4 5 6 7
| static void zmalloc_default_oom(size_t size) { fprintf(stderr, "zmalloc: Out of memory trying to allocate %zu bytes\n", size); fflush(stderr); abort(); }
|
3 注册处理器
c1 2
| zmalloc_set_oom_handler(redisOutOfMemoryHandler);
|
4 自定义处理器
c1 2 3 4 5 6 7 8 9 10
|
void redisOutOfMemoryHandler(size_t allocation_size) { serverLog(LL_WARNING,"Out Of Memory allocating %zu bytes!", allocation_size); serverPanic("Redis aborting for OUT OF MEMORY. Allocating %zu bytes!", allocation_size); }
|