Docker app.ymlのshm_sizeオプション

app.yml で shm_size パラメータをオプションとして追加することは可能でしょうか?本日、vacuum analyze を実行しようとした際に以下のエラーが発生しました。

ERROR: could not resize shared memory segment

これは共有メモリ使用量を 1 GB に増やそうとして失敗したもので、デフォルトでは 512 MB しか割り当てられていませんでした。このパラメータは起動スクリプトに含まれているようですが、.yml ファイルでオプションとして設定可能にすること(デフォルトではコメントアウトしておくなど)ができればと思います。

デフォルトで提供する Docker の引数を上書きするには、--docker-args を使用してカスタム引数を渡すことができます。

具体的には、以下のようなコマンドになるはずです。
./launcher start app --docker-args "--shm-size=1024m"

「いいね!」 7

残念ながら、試したところうまくいきませんでした。おそらく、共有メモリのサイズを増やすためにコンテナを再構築する必要があるのでしょう。実際に反映させるには、ランチャースクリプト内のハードコードされた部分の値を変更し、その後コンテナを再構築する必要がありました。

また、この設定はアップデートや再構築の際に維持されない可能性が高いです。毎回手動で変更する必要があるでしょう。

「いいね!」 1

どのコマンドを実行しましたか?--shm-size オプションを有効にするには、コンテナの再ビルドが必ず必要です。

「いいね!」 2

最初はコンテナを停止し、そのパラメータ付きでランチャーの起動コマンドを実行しました。その後、ランチャースクリプト内で --shm-size パラメータを手動で編集し、コンテナを再構築しました。すると、値が正しく調整されました。もしコマンドラインでパラメータを上書きしてコンテナを再構築する場合、/admin/upgrade インターフェースを通じて更新や再構築を行った際にその変更が失われてしまわないでしょうか?そのため、これを app.yml のフィールドとして定義するのが最も良い方法だと考えました。そうすれば、再構築やコードの更新を通じて設定が保持されるからです。

「いいね!」 1

なるほど、これは確かに役立ちそうだね。@sam、どう思う?

「いいね!」 1

ただし、これでコンテナは再構築されないため、安全です。

すでに以下の通り用意されていませんか:

yaml 内の docker_args: ....

わかりません。それ自体がランチャーファイルを上書きするのでしょうか?オプションがハードコードされている3箇所を確認しました。

これは修正すべきですが、修正には非常に複雑なバッシュスクリプトが必要です。ぜひ試してみてください。

当社の Docker 引数取得関数は、shm-size の管理、ユーザーによる上書きの処理、およびデフォルト値の設定を担当する必要があります。

「いいね!」 2

@Ghan さん、こんにちは

当面の間(テスト目的であり、以下の注意点を参照のこと)、コンテナがビルドされた後、Docker を介して直接変更することができます。手順は以下の通りです:

  • /var/lib/docker/containers/$CONTAINER_ID/hostconfig.json ファイルを直接編集します。
  • 例えば、上記のファイル内の ShmSize の値を変更します。
  • コンテナを停止し、再起動します。

Docker コンテナの hostconfig ファイルでは、以下のように表示されます:

"ShmSize":536870912,

参考になれば幸いです。

注意点:hostconfig.json を変更する前に Docker サービスを停止する必要があると報告している人もいます(変更が上書きされるのを防ぐため)。ただし、私は実際にこれをテストしていません。明らかに launcher による解決策の方が優れています :slight_smile:

shm_size を増やすための現在の解決策を知っている人はいますか?

編集:まだハードコードされているようです。

関連スレッド: