作者

InterSystems中国
文章 Claire Zheng · 四月 28 2m read

最小化 IRIS 容器占用空间

有时,客户需要一个小型 IRIS 实例在云中执行某些操作,然后将其关闭,或者他们需要数百个容器(即每个最终用户或每个界面一个容器)来处理小型工作负载。 这个练习的目的是了解 IRIS 实例可以做到多小。在这次练习中,我们重点研究了IRIS 实例可配置的最小内存量。 您知道影响 IRIS 内存分配的所有参数吗?

内存设置

这些是影响 IRIS 内存分配的不同桶及其相应参数:

  • 全局缓冲区(Global Buffers)(32 MB) => 8k 数据库的最小值似乎为 32 MB
  • 常规缓冲区(Routine Buffers)(26 MB) => 文档中的理论最小值为 430 个缓冲区 x 每个缓冲区 64k ~ 26 MB,实际为 26 MB
  • 日志缓冲区(Journal Buffers)(16 MB) => 理论上和实际上,Unicode 系统的最小值为 16 MB(8 位为 8 MB)
  • 缓冲区描述符(Buffer descriptors)(3 MB) => 似乎是 3 MB,无法调整
  • gmheap(16 MB) => 最小值为 256 页 x 每页 64k = 16 MB(CPF 中的配置字节数 = 16384)
  • ECP(1 MB) => CPF 中有几个参数控制这个参数。MaxServerConn 和 MaxServers。即使 MaxServerConn=0 和 MaxServers=0,最小值也是 1 MB,因为无论是否使用 ECP,IRIS 都会为这些结构分配内存。当 MaxServerConn=1 和 MaxServers=2 时,默认值为 5 MB。
  • **杂项(**Miscellaneous)(15 MB) => 根据我的测试,最小值似乎是 15 MB。我不能低于这个值。

所有这些设置配置完成后,CPF 参数将如下所示:

globals=0,0,32,0,0,0
routines=0,0,0,0,0,26
jrnbufs=16
gmheap=16384
MaxServerConn=0
MaxServers=0

因此,如果在 CPF 文件中使用这些参数配置 IRIS(我使用的是 IRIS 2024.1)IRIS 在启动时分配的最小内存总量为 111 MB (用户进程除外)。 您可以在messages.log 文件中查看 IRIS 分配的内存:

 

我知道,这肯定是四舍五入的缘故,因为如果将所有单独的数字相加,就会得到 109 MB,但在 messages.log 中却被报告为 111 MB。

在此过程中,我们还发现 IRIS 容器无法分配 Huge 页面,InterSystems 已报告并在后续版本中修复了这一问题。

顺便说一句,这篇文章也可以作为学习 IRIS 内不同内存参数的通用文章,以获得更好的性能

希望您喜欢!