c - AIX 上的 Redis 内存分配

标签 c memory redis gnu-make aix

我已使用 gcc 将 Redis 3.0.6 编译到 AIX 6.1 ppc 系统中,但当数据库尝试超过 2GB RAM 时,它会崩溃。

编译器标志和环境变量是:

alias make="gmake"

export CC=gcc
export CFLAGS="-DAIX64 -DBIT64 -maix64 -D_AIX -D_AIX53 -D_AIX61 -I/opt/freeware/include -I/usr/include${CFLAGS_XTRA}"
export CXX=g++
export CXXFLAGS=$CFLAGS
export LDFLAGS="-DAIX64 -DBIT64 -maix64 -L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib/pthread/ppc64:/opt/freeware/lib:/usr/lib:/lib,-bmaxdata:0x80000000"

export AR="ar -X64"
export LIBPATH=.:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib
export OBJECT_MODE=64
echo Gcc environment variables \(CC,CFLAGS,LDFLAGS,LIBPATH,etc\) are set.

但是当 RAM 达到 2GB 时,它会崩溃并显示以下日志:

41680910:M 12 Jan 12:46:13.056 # Out Of Memory allocating 102709 bytes! 
41680910:M 12 Jan 12:46:13.056 # === REDIS BUG REPORT START: Cut & paste starting from here === 
41680910:M 12 Jan 12:46:13.056 # ------------------------------------------------ 
41680910:M 12 Jan 12:46:13.056 # !!! Software Failure. Press left mouse button to continue
41680910:M 12 Jan 12:46:13.057 # Guru Meditation: "Redis aborting for OUT OF MEMORY" #redis.c:3572 
41680910:M 12 Jan 12:46:13.057 # ------------------------------------------------

在我尝试执行时它也会崩溃

redis-server --test-memory 2048

但如果我执行就不会

redis-server --test-memory 2047

很明显它必须有 2GB 的限制,但我找不到。

需要任何想法或更多信息吗?

最佳答案

尝试省略 -bmaxdata:0x80000000。在 64 位版本上,此参数将堆大小限制为 2GB。在 32 位版本上,它会将默认低值增加到 2GB。

关于c - AIX 上的 Redis 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748787/

相关文章:

caching - Redis 在 hSet 键上设置 TTL

python - 通过 C API 在 Python 模块中定义全局变量

redis - redis 的 LPUSH 列表操作接受的最大值是多少?

从 C 中的不同文件调用方法

c++ - 如何防止递归函数中不必要的内存使用

hadoop - 当使用更多节点时,Hadoop无法创建足够的容器

"a->b=1;c=a"可以重新排序吗?

node.js - 基于延迟的 Redis 连接

c - 拟合未知曲线

c - 带有 fscanf 的 EXC_BAD_ACCESS