docker-compose上で、Digdagをサーバーモードで起動し、PostgreSQLに接続した際に以下のようなログが多発した。
digdag | 2021-01-26 23:23:30 +0000: Digdag v0.9.42 digdag | 2021-01-26 23:23:32 +0000 [INFO] (main): secret encryption engine: disabled digdag | 2021-01-26 23:23:32 +0000 [INFO] (main): XNIO version 3.3.6.Final digdag | 2021-01-26 23:23:32 +0000 [INFO] (main): XNIO NIO Implementation Version 3.3.6.Final digdag | 2021-01-26 23:23:32 +0000 [INFO] (main): Starting server on 0.0.0.0:65432 digdag | 2021-01-26 23:23:32 +0000 [INFO] (main): Bound on 0.0.0.0:65432 (api) postgres_1 | 2021-01-26 23:23:32.952 UTC [130] FATAL: sorry, too many clients already postgres_1 | 2021-01-26 23:23:33.208 UTC [131] FATAL: sorry, too many clients already postgres_1 | 2021-01-26 23:23:33.592 UTC [132] FATAL: sorry, too many clients already postgres_1 | 2021-01-26 23:23:34.163 UTC [133] FATAL: sorry, too many clients already postgres_1 | 2021-01-26 23:23:35.011 UTC [134] FATAL: sorry, too many clients already
どうやらDigdagからPostgreSQLに対してのコネクションが多発しているような感じたったのだが、特に理由がわからず。。。
うぁーとか思ってこんなツイートをすると
docker-composeでdigdag、postgres動かそうとするとpostgresのconnectionが枯渇するんだけど全然原因わからん。。 pic.twitter.com/bFm4kwd2Qu
— Ryo Nakamine (@r_nakamine) 2021年1月25日
すかさず@hiroysatoさんが丁寧に教えてくださった!(本当にありがとうございます🙇♂️)
こんにちは、database.maximumPoolSize を指定すると改善するとかそういうやつですかね?デフォルトは、CPU cores * 32みたいです。https://t.co/sOATrfDzwm
— Hiroyuki Sato (@hiroysato) 2021年1月25日
コネクション数はデフォルトでCPUコア数 × 32らしく、手元のpcのdocker for macではCPUに4コアを割り当ており、 またPostgreSQLの最大コネクション数は通常でデフォルトが100なっているらしく、それが原因でコネクションが枯渇している感じだった。
解決策
ツイートにもあるが、設定ファイルであるserver.properties
にdatabase.maximumPoolSize
のパラメータを追加して解決した。(今回は32で固定)
サンプル
今回はdocker-composeの上でDigdag、PosgresSQLのサーバーを立てて検証した。 github.com