AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ruby 公式の Docker イメージで jemalloc

パフォーマンスチューニングの値があと一歩伸び悩んでいるので、ふと思い立って jemalloc を導入してみた。

# runtime stage: LD_PRELOAD で jemalloc を指定
FROM ruby:3.1.0-slim-bullseye as app
ENV APP=/app \
    LANG=C.UTF-8 \
    RUNTIME_PACKAGES="tzdata libmariadb3 libjemalloc2" \
    LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2

ビルドしているのでまだどうなるかわからないけど、初めて本番に jemalloc 入れる……。

github.com

エラー

なんか ECS exec したらエラーでた。

Starting session with SessionId: donbulinux-0000111122223333
ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libjemalloc.so.2' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
# ls -lha /usr/lib/x86_64-linux-gnu/libjemalloc.so.2

よく見たらマルチステージビルドのうち、最終的なイメージ元になるトコでインストールしてなくて「リンカがライブラリないよーって言ってる」状態だった。

apt-get するステージを変更したら解決したので、ワイと同じような PON はみんなしてくれるなよ……! (こまったら Dockerfile の一番最後に書けば大体解決するはず