Ghan
1
是否可以将 shm_size 参数作为 app.yml 中的一个选项?今天我在尝试执行 vacuum analyze 时遇到了以下错误:
ERROR: 无法调整共享内存段大小
系统试图将共享内存使用量增加到 1 GB,但失败了,因为默认情况下它只有 512 MB。该参数似乎位于启动脚本中,但将其作为 .yml 文件中的一个选项(默认情况下可能注释掉)可能会更友好。
tgxworld
(Alan Tan)
2
您可以通过 --docker-args 传递自定义的 Docker 参数,以覆盖我们提供的默认设置。
我认为用法大致如下:./launcher start app --docker-args "--shm-size=1024m"
7 个赞
Ghan
3
不幸的是,我尝试后并未奏效。我认为可能需要重新构建容器以扩大共享内存空间?我不得不修改启动脚本中硬编码区域的值,然后重新构建容器,更改才会真正生效。
此外,这很可能无法在更新或重新构建后保留——您每次都需要手动进行修改。
1 个赞
tgxworld
(Alan Tan)
4
你运行了哪些命令?要使 --shm-size 选项生效,你必须重新构建容器。
2 个赞
Ghan
5
我最初只是停止容器,然后使用带有该参数的启动器启动命令。接着,我手动编辑了启动器脚本中的 --shm-size 参数,并重新构建了容器。之后,该值就正确调整了。如果你通过命令行覆盖该参数来重新构建容器,那么当你通过 /admin/upgrade 界面执行更新或重新构建时,更改不会丢失吗?这就是我认为最好将其设为 app.yml 中的一个字段的原因——这样在重新构建和代码更新时,该设置就能得以保留。
1 个赞
sam
(Sam Saffron)
7
不过那并不会重建容器,所以是安全的。
我们不是已经有了这个吗,参考:
你的 yaml 中的 docker_args: ....。
Ghan
8
我不确定。这会覆盖启动器文件本身吗?我看到有三个地方硬编码了这个选项:
sam
(Sam Saffron)
9
那我们得修复这个问题,不过修复方案涉及一个非常复杂的 Bash 脚本。欢迎随时尝试。
我们的 Docker 参数获取函数应当负责处理 shm-size,包括处理用户覆盖并设置默认值。
2 个赞
neounix
(Dark Matter)
10
嘿 @Ghan
在此期间(仅用于测试目的,请参见下方的注意事项),你可以在容器构建后通过 Docker 直接修改该设置,步骤如下:
- 直接编辑
/var/lib/docker/containers/$CONTAINER_ID/hostconfig.json 文件。
- 例如,修改上述文件中的
ShmSize 值。
- 停止并重新启动容器。
在我们的 Docker 容器 hostconfig 文件中,它看起来是这样的:
"ShmSize":536870912,
希望这能帮到你(HTH)。
注意事项:有人发帖称,在修改 hostconfig.json 之前必须停止 Docker 服务(否则更改会被覆盖)。不过,我本人尚未对此进行测试。显然,使用 launcher 解决方案会更好 
有人知道增加 shm_size 的当前解决方案吗?
编辑:似乎它仍然是硬编码的。
相关帖子: