我正在工作的项目开发了一个在后端使用MarkLogic 9的Java服务。我们正在运行一个Jenkins build服务器,它执行(以及其他)用XQuery编写的MarkLogic中的几个测试。对于这些测试,MarkLogic在Jenkins主机(运行Ubuntu Linux)上的docker容器中运行。Jenkins主机配置了12 GB的RAM和8 GB的交换空间。最近,我注意到运行在容器中的MarkLogic实例使用了大量内存(高达10 GB)。由于经常有其他构建作业并行运行,Jenkins开始交换内存,有时甚至会耗尽所有交换空间,因此MarkLogic报告无法获得更多内存。显然,这种情况经常导致构建失败。
为了进一步分析这一点,我在运行Docker for Windows的PC上进行了一些测试,发现MarkLogic测试可以在5-6 GB内存的情况下成功运行。MarkLogic日志显示它看到了所有主机内存,并希望使用所有内存。但由于我们在该主机上运行了其他构建进程,因此这种行为是不可取的。
我的问题是:有没有可能告诉MarkLogic不要使用这么多内存?我们在构建期间准备docker镜像,因此我们可以修改一些配置,但必须以某种方式编写脚本。
发布于 2021-10-21 13:18:07
容器未正确检测内存限制的问题已经确定,应该在即将发布的版本中解决。
同时,您可以通过以下方式缓解此问题:
automatic更改为manual和setting cache sizes appropriate for the allocated resources。设置这些配置的方法多种多样,无论是从ml-gradle项目部署和设置配置,还是制作自己的Manage API REST calls或programmatically:- [admin:group-set-cache-sizing](https://docs.marklogic.com/admin:group-set-cache-sizing)
- [admin:group-set-compressed-tree-cache-partitions](https://docs.marklogic.com/admin:group-set-compressed-tree-cache-partitions)
- [admin:group-set-compressed-tree-cache-size](https://docs.marklogic.com/admin:group-set-compressed-tree-cache-size)
- [admin:group-set-expanded-tree-cache-partitions](https://docs.marklogic.com/admin:group-set-expanded-tree-cache-partitions)
- [admin:group-set-expanded-tree-cache-size](https://docs.marklogic.com/admin:group-set-expanded-tree-cache-size)
- [admin:group-set-list-cache-partitions](https://docs.marklogic.com/admin:group-set-list-cache-partitions)
- [admin:group-set-list-cache-size](https://docs.marklogic.com/admin:group-set-list-cache-size)指定内存支架中碎片的最大数量。内存中的支架包含任何新的或更改的片段的最新版本。定期将内存中的支架作为林中的新支架写入磁盘。此外,如果支架累积的碎片数量超过此限制,后台线程会自动将其保存到磁盘。
https://stackoverflow.com/questions/69659737
复制相似问题