Ruby on Rails and Docker: Jemalloc in multi-platform images

Teamtailor has been running with jemalloc in production for a couple of days, with great success. Today, we wanted to try running the app on AWS's Graviton, their ARM-based CPUs, to see if we could get a better cost/performance ratio.

Our Docker image setup for jemalloc, based on a gist from John Bachir, was using a hard-coded path containing a reference to x86_64:

ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
ENV MALLOC_CONF="dirty_decay_ms:1000,narenas:2,background_thread:true"

The solution I came up with to support both linux/amd64 and linux/arm64 was to use a symlink:

RUN ln -s /usr/lib/*-linux-gnu/libjemalloc.so.2 /usr/lib/libjemalloc.so.2
ENV LD_PRELOAD=/usr/lib/libjemalloc.so.2
ENV MALLOC_CONF="dirty_decay_ms:1000,narenas:2,background_thread:true"