DB2 docker 无法分配共享内存段
DB2 docker Shared memory segments cannot be allocated
我正在尝试使用 DB2 数据库设置 docker 图像。
安装完成没有任何问题,但是当我尝试重新启动数据库时出现以下错误:
SQL1084C Shared memory segments cannot be allocated. SQLSTATE=57019
我的 Dockerfile 基于这个:
https://github.com/jeffbonhag/db2-docker
他说同样的问题应该通过添加命令
来解决
sysctl kernel.shmmax=18446744073692774399
允许内核分配更多内存,但错误仍然存在。
docker 守护程序本身在 Ubuntu 14.04 中运行,它在 MacOSX 上的 Parallels 中运行。
编辑:经过一番搜索,我发现这与以下命令有关:
UPDATE DB CFG FOR S0MXAT01 USING locklist 100000;
您过度分配了数据库内存堆,即 docker 无法满足内存要求。看看 following link to the manuals。这将为您提供数据库内存中内容的细分:
Bufferpools
The database heap
The locklist
The utility heap
The package cache
The catalog cache
The shared sort heap, if it is enabled
A 20% overflow area
您可以 fiddle 处理(减少)这些堆中的任何一个,直到 docker 满意为止。
万一其他人 运行 遇到这种情况 - 如果您滚动自己的容器并将内存设置为自动,它可能会尝试将主机上的所有内存分配给 Db2,从而导致此错误。有时最初的开始工作正常,但你最终会在数周或数月后出现奇怪的崩溃。
“官方”db2 容器(开发者社区版本之一)处理这个问题。如果您要构建自己的容器,您可能需要根据容器的大小将 DATABASE_MEMORY and/or INSTANCE_MEMORY 设置为合理的限制,并在容器中重新启动 Db2。这可以在您的入口点脚本中完成。
我正在尝试使用 DB2 数据库设置 docker 图像。 安装完成没有任何问题,但是当我尝试重新启动数据库时出现以下错误:
SQL1084C Shared memory segments cannot be allocated. SQLSTATE=57019
我的 Dockerfile 基于这个: https://github.com/jeffbonhag/db2-docker 他说同样的问题应该通过添加命令
来解决sysctl kernel.shmmax=18446744073692774399
允许内核分配更多内存,但错误仍然存在。
docker 守护程序本身在 Ubuntu 14.04 中运行,它在 MacOSX 上的 Parallels 中运行。
编辑:经过一番搜索,我发现这与以下命令有关:
UPDATE DB CFG FOR S0MXAT01 USING locklist 100000;
您过度分配了数据库内存堆,即 docker 无法满足内存要求。看看 following link to the manuals。这将为您提供数据库内存中内容的细分:
Bufferpools
The database heap
The locklist
The utility heap
The package cache
The catalog cache
The shared sort heap, if it is enabled
A 20% overflow area
您可以 fiddle 处理(减少)这些堆中的任何一个,直到 docker 满意为止。
万一其他人 运行 遇到这种情况 - 如果您滚动自己的容器并将内存设置为自动,它可能会尝试将主机上的所有内存分配给 Db2,从而导致此错误。有时最初的开始工作正常,但你最终会在数周或数月后出现奇怪的崩溃。
“官方”db2 容器(开发者社区版本之一)处理这个问题。如果您要构建自己的容器,您可能需要根据容器的大小将 DATABASE_MEMORY and/or INSTANCE_MEMORY 设置为合理的限制,并在容器中重新启动 Db2。这可以在您的入口点脚本中完成。