Opção shm_size do Docker em app.yml

Seria possível tornar o parâmetro shm_size uma opção no app.yml? Enfrentei este erro hoje ao tentar executar um vacuum analyze:

ERROR: could not resize shared memory segment

O sistema tentava aumentar o uso de memória compartilhada para 1 GB, mas falhou, pois o padrão é de apenas 512 MB. Este parâmetro parece estar no script do lançador, mas seria bom tê-lo como uma opção (possivelmente comentado por padrão) no arquivo .yml.

Você pode passar argumentos personalizados do Docker para substituir os padrões que fornecemos com --docker-args.

Acredito que ficará algo como ./launcher start app --docker-args "--shm-size=1024m".

7 curtidas

Isso não funcionou quando tentei, infelizmente. Acredito que talvez o contêiner precise ser recriado para aumentar o tamanho do espaço de memória compartilhada? Tive que alterar o valor nas áreas com código fixo no script de inicialização e depois recriar o contêiner para que isso realmente surtisse efeito.

Isso provavelmente não persistiria em atualizações/recriações também — você teria que alterá-lo manualmente toda vez.

1 curtida

Quais comandos você executou? Você definitivamente terá que reconstruir o contêiner para que a opção --shm-size tenha efeito.

2 curtidas

No início, eu apenas parei o contêiner e depois executei o comando de inicialização do launcher com aquele parâmetro. Em seguida, editei manualmente os parâmetros --shm-size dentro do próprio script do launcher e reconstruí o contêiner. Depois disso, o valor foi ajustado corretamente. Se você substituir o parâmetro na linha de comando para reconstruir o contêiner, a alteração não será perdida se você realizar uma atualização/reconstrução pela interface /admin/upgrade? É por isso que achei que seria melhor torná-lo um campo no app.yml — assim, ele persistiria nas reconstruções e atualizações de código.

1 curtida

Hmm, consigo ver que isso seria útil. @sam, o que você acha disso?

1 curtida

Isso nunca reconstrói o contêiner, então é seguro.

Já não temos isso conforme:

docker_args: .... no seu yaml.

Não tenho certeza. Isso sobrescreve o próprio arquivo do launcher? Vejo 3 locais onde a opção está codificada manualmente:

Devemos corrigir isso então, mas a correção é um script bash muito, muito complicado. Sinta-se à vontade para tentar.

Nossa função de obtenção de argumentos do Docker deve ser responsável pelo shm-size. Gerenciar as substituições do usuário e definir um valor padrão.

2 curtidas

Olá @Ghan

Enquanto isso (para fins de teste, veja a ressalva abaixo), você pode alterar isso diretamente com o docker após a construção do container, da seguinte forma:

  • Edite diretamente o arquivo /var/lib/docker/containers/$CONTAINER_ID/hostconfig.json.
  • Por exemplo, altere o valor de ShmSize no arquivo acima.
  • Pare e reinicie o container.

No nosso arquivo hostconfig do container docker, ele se parece com isto:

"ShmSize":536870912,

Espero que ajude (HTH).

Ressalva: Algumas pessoas postaram que você deve garantir que o serviço do docker esteja parado antes de modificar o hostconfig.json (ou as alterações serão sobrescritas). No entanto, eu não testei isso na prática. Obviamente, uma solução launcher é melhor :slight_smile:

Alguém sabe qual é a solução atual para aumentar o shm_size?

Editar: Parece que ainda está codificado.

Tópico relevante: