这是我在stackoverflowidercomm中的第一个问题,希望庞大的文字不会太混乱:)
我们的DB2 Express数据库作为动态容器示例运行时遇到了一个问题,这会影响同时运行的所有DB2容器。
我们使用Jenkins作为CI服务器,它包含多个管道来构建、测试和部署我们的开发。因此,管道启动了一些不同的容器(例如Apache、JBOSS、DB2),以启动我们正在实现的应用程序的自动GUI测试。在开发过程中运行两种管道:一个检查自己的分支(我们称之为特性驱动测试),一个检查最终合并到开发中(我们称之为开发测试)。在特性驱动测试的情况下,实现管道以启动容器,运行高优先级测试的检查,并最终关闭所有相关container。开发测试流水线所做的几乎与特性驱动测试相同,但是它首先关闭前一个作业的所有正在运行的容器,启动新的容器并在作业完成后让它们继续运行。
每个DB2容器(即使是由作业创建的)都从一个空数据库开始,由SQL脚本填充(创建数据库对象,将初始数据插入表中,...)。在GUI检查期间,应用程序从数据库中读取或写入数据库。我们已经实现了连接测试作为健康检查。
在这种情况下,我们希望启动大量的特性驱动测试。当然,我们有一个物理限制,但如果我们试图运行3个以上的特性驱动测试,所有DB2容器都会处于不健康状态。这也会影响开发测试的DB2容器,而这与特性驱动测试无关。
在我们的分析中,我们发现每个不正常的DB2容器都会抛出两种错误消息:
- su:执行/bin/bash:资源暂时不可用
- {{}}KB-1956年:SQL 30082 N安全处理失败,原因为“15”(“处理失败”)
这两种错误消息看起来都像是因为缺少资源而启动进程的问题。我们用“ulimit”命令进行的检查没有显示任何异常,无论是在正在运行的容器中还是在主机服务器上。我们将“最大用户进程数”从4096设置为无限制。主机也有同样的设置。我们试图在启动阶段运行命令来设置Dockerfile。但没有任何效果。
不正常状态并不总是出现在脚本的同一行。在大多数情况下,容器会在数据库填满期间更改状态,但GUI测试也会导致此效果。我们尝试在另一台计算机上重现此效果。这些检查在没有管道的情况下运行,但使用相同的SQL脚本。我们无法以这种方式重现此效果。
我们使用的环境是:
操作系统:CentOS7(虚拟机):7.5.1804 DB2 Express数据库版本11.1作为容器(基于CentOs)
你知道原因吗?我们该怎么解决?
此致,迈克尔
1条答案
按热度按时间qrjkbowd1#
因为您可能没有足够的内核或内存来运行这些机器,所以我建议使用db2容器操作符,并在Kubernetes上运行它,而不是在docker上。
另请查看您的错误,这是一个安全错误SQL30082N安全处理失败,原因代码为15“服务器上的安全处理失败”https://www.ibm.com/support/pages/node/135213