本文介绍在 ARM 架构服务器上安装 OceanBase 数据库时,执行 Benchmark IO 测试过程中报 4013 错误的原因以及解决方法。
适用版本
OceanBase 数据库 V2.X 版本
问题现象
在 ARM 架构服务器上安装 OceanBase 数据库时,在执行 Benchmark IO 测试过程中报错,日志信息如下。
[2021-02-09 09:42:38.110616] WARN [LIB] __alloc (co_protected_stack_allocator.cpp:89) [15543][0][Y0-0000000000000000] [lt=3] invalid arg(size=2244608)
[2021-02-09 09:42:38.110625] WARN [LIB] alloc (co_protected_stack_allocator.cpp:72) [15543][0][Y0-0000000000000000] [lt=7] alloc failed(ret=0)
[2021-02-09 09:42:38.110633] ERROR [LIB] start (thread.cpp:80) [15543][0][Y0-0000000000000000] [lt=4] alloc stack memory failed(ret=-4013, errno=2) BACKTRACE:0x9959f4f 0x98d5097 0x7ee0bf 0x3c56407 0x98092c7 0x9809397 0x9806feb 0x97ff60f 0x41cca57 0x990a68b 0x983eeab 0x983fd1b 0x984ba73 0x3ef090b 0x3df35fb 0xffffa9170d63 0x3e3006b 0x3e3006a
[2021-02-09 09:42:38.113497] WARN [COMMON] init (ob_simple_thread_pool.cpp:44) [15543][0][Y0-0000000000000000] [lt=2856] start thread pool fail(ret=-4013)
[2021-02-09 09:42:38.113518] WARN [COMMON] init (ob_io_disk.cpp:574) [15543][0][Y0-0000000000000000] [lt=8] thread pool init error(ret=-4013)
[2021-02-09 09:42:38.113526] INFO [COMMON] ob_io_disk.cpp:581 [15543][0][Y0-0000000000000000] [lt=5] ObIOFaultDetector init finished(ret=-4013)
可能原因
ARM 架构的服务器的内存页大小与 x86 服务器不同,PAGE_SIZE 的默认值不是 OceanBase 数据库使用的 4096。
解决方式
将 ARM 架构服务器的 PAGE_SIZE 值修改为 4096。
下载内核源码。
使用
make menuconfig菜单来修改内核参数。修改
PAGE_SIZE的大小为 4k。
注释
.config文件中的参数CONFIG_SYSTEM_TRUSTED_KEYS。[root@hostname xxx]# vim .config ... #CONFIG_SYSTEM_TRUSTED_KEYS ...编译内核并编译安装。
[root@hostname xxx]# make -j8 [root@hostname xxx]# make modules_install && make install检查
PAGE_SIZE。[root@hostname /]# getconf PAGE_SIZE 4096重新执行 Benchmark IO,安装 OceanBase 数据库。