何度か教えていただいているので、今度こそしっかり覚えておきたくて、まきさんからのコメントを記録。
## メモリサイズの考え方
SpringBootのアプリをコンテナとして動かす場合には768MB以上必要で、1GBくらいは割り当てる必要があるのではないかという僕のコメントに対していただいたコメント。
それは不正確..Tomcatを使う場合は最大コネクション(スレッド)がデフォルト200で+50スレッドくらい余裕を見ると250M (-Xss1M)でデフォルトのReservervedCodeCacheSize 240MとDirectMemorySize 10M加えた上にMaxMetaSpaceSizeがざっくり50Mくらい足すと550Mくらい使ってこれHeapを足すとコンテナサイズ
— Toshiaki Maki (@making) November 16, 2019
その前提であればHeap 218Mくらいにして合計768MBというのは変ではない数値。スレッド数がそんなにいらないとかNetty使う場合とかは200の部分が一気に減る。Xssを512kにすればさらに半減。パフォーマンスに影響あるけどCodeCacheも32Mくらいに減らして、Heapも180Mくらいにすれば全部込みで250M
— Toshiaki Maki (@making) November 16, 2019
ここにその辺の情報がありますhttps://t.co/HsMBQaRZVM
— Toshiaki Maki (@making) November 16, 2019
## Build Pack
上記のようなメモリサイズの計算をやってくれるツールも教えてもらった。
https://t.co/6Dq3gGFrIM
— Toshiaki Maki (@making) November 16, 2019
このCNB builder使ってDockerイメージ作ればmemory calculator使って自動でメモリ設定してくれます!
このBuilderで作ったイメージサンプルですが、
— Toshiaki Maki (@making) November 16, 2019
docker run --rm -p 8080:8080 -m 768m making/hello-jsug
これ実行すると-mの値によってheapサイズが変わります。それ以外は自動計算。-e BPL_THREAD_COUNT=100つけると計算に使うスレッド数を指定できます。そのほかのルール https://t.co/UeCUF6QHLa pic.twitter.com/pXtgoAgJ3G
僕のブログはこのBuilderで作ったイメージを使っていて、コンテナのメモリサイズは200MBです。設定はこんな感じhttps://t.co/tFNKPYYbXi
— Toshiaki Maki (@making) November 16, 2019
ありがとうございます!